From 3b3cd509d5dcf9ea77513fd3c6f6bb3a30aeb31e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9A=D0=BE=D0=B1=D1=8F=D0=BA=D0=BE=D0=B2=20=D0=A1=D0=B5?= =?UTF-8?q?=D1=80=D0=B3=D0=B5=D0=B9?= Date: Thu, 1 Dec 2016 01:39:44 +0500 Subject: [PATCH 1/6] first --- flow.js | 85 +++++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 80 insertions(+), 5 deletions(-) diff --git a/flow.js b/flow.js index d46e521..68af571 100644 --- a/flow.js +++ b/flow.js @@ -4,7 +4,7 @@ * Сделано задание на звездочку * Реализованы методы mapLimit и filterLimit */ -exports.isStar = true; +exports.isStar = false; /** * Последовательное выполнение операций @@ -12,7 +12,25 @@ exports.isStar = true; * @param {Function} callback */ exports.serial = function (operations, callback) { - console.info(operations, callback); + if (operations.length === 0 || !operations) { + callback(null, null); + + return; + } + + var currentIndex = 0; + function innerCallback(error, data) { + if (error || currentIndex === operations.length - 1) { + callback(error, data); + + return; + } + + currentIndex++; + operations[currentIndex](data, innerCallback); + } + + operations[currentIndex](innerCallback); }; /** @@ -22,7 +40,31 @@ exports.serial = function (operations, callback) { * @param {Function} callback */ exports.map = function (items, operation, callback) { - console.info(items, operation, callback); + if (items.length === 0 || !items) { + callback(null, null); + + return; + } + var result = []; + var resultCount = 0; + + items.forEach(function (item, i) { + operation(item, innerCallback.bind(null, i)); + }); + + function innerCallback(index, err, data) { + resultCount++; + if (err) { + callback(err); + + return; + } + + result[index] = data; + if (resultCount === items.length) { + callback(null, result); + } + } }; /** @@ -32,7 +74,31 @@ exports.map = function (items, operation, callback) { * @param {Function} callback */ exports.filter = function (items, operation, callback) { - console.info(items, operation, callback); + if (items.length === 0 || !items) { + callback(null, null); + + return; + } + + exports.map(items, operation, innerCallback); + + function innerCallback(err, data) { + if (err) { + callback(err); + + return; + } + + var result = []; + + data.forEach(function (item, i) { + if (item === true) { + result.push(items[i]); + } + }); + + callback(null, result); + } }; /** @@ -40,7 +106,16 @@ exports.filter = function (items, operation, callback) { * @param {Function} func – функция, которой суждено стать асинхронной */ exports.makeAsync = function (func) { - console.info(func); + return function () { + setTimeout(function (args) { + var callback = args[args.length - 1]; + try { + callback(null, func.apply(null, args.slice(0, args.length - 1))); + } catch (err) { + callback(err); + } + }, 0, [].slice.call(arguments)); + } }; /** From d34e32bed72ebbb83f654e1d7309244e8cdfc498 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9A=D0=BE=D0=B1=D1=8F=D0=BA=D0=BE=D0=B2=20=D0=A1=D0=B5?= =?UTF-8?q?=D1=80=D0=B3=D0=B5=D0=B9?= Date: Thu, 1 Dec 2016 01:44:19 +0500 Subject: [PATCH 2/6] lint --- flow.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/flow.js b/flow.js index 68af571..38d9852 100644 --- a/flow.js +++ b/flow.js @@ -49,7 +49,7 @@ exports.map = function (items, operation, callback) { var resultCount = 0; items.forEach(function (item, i) { - operation(item, innerCallback.bind(null, i)); + operation(item, innerCallback.bind(null, i)); }); function innerCallback(index, err, data) { @@ -104,6 +104,7 @@ exports.filter = function (items, operation, callback) { /** * Асинхронизация функций * @param {Function} func – функция, которой суждено стать асинхронной + * @returns */ exports.makeAsync = function (func) { return function () { @@ -115,7 +116,7 @@ exports.makeAsync = function (func) { callback(err); } }, 0, [].slice.call(arguments)); - } + }; }; /** From b9833ce87b3b38bc627cc42f93ebbc83dfe727c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9A=D0=BE=D0=B1=D1=8F=D0=BA=D0=BE=D0=B2=20=D0=A1=D0=B5?= =?UTF-8?q?=D1=80=D0=B3=D0=B5=D0=B9?= Date: Thu, 1 Dec 2016 01:47:19 +0500 Subject: [PATCH 3/6] lint --- flow.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flow.js b/flow.js index 38d9852..7897185 100644 --- a/flow.js +++ b/flow.js @@ -104,7 +104,7 @@ exports.filter = function (items, operation, callback) { /** * Асинхронизация функций * @param {Function} func – функция, которой суждено стать асинхронной - * @returns + * @returns {Function} func */ exports.makeAsync = function (func) { return function () { From 8c3a04fb190d6e22f04fea95cbbdda7cfe4b2aa7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9A=D0=BE=D0=B1=D1=8F=D0=BA=D0=BE=D0=B2=20=D0=A1=D0=B5?= =?UTF-8?q?=D1=80=D0=B3=D0=B5=D0=B9?= Date: Thu, 1 Dec 2016 01:51:17 +0500 Subject: [PATCH 4/6] fix empty items --- flow.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/flow.js b/flow.js index 7897185..8621c17 100644 --- a/flow.js +++ b/flow.js @@ -41,7 +41,7 @@ exports.serial = function (operations, callback) { */ exports.map = function (items, operation, callback) { if (items.length === 0 || !items) { - callback(null, null); + callback(null, []); return; } @@ -75,7 +75,7 @@ exports.map = function (items, operation, callback) { */ exports.filter = function (items, operation, callback) { if (items.length === 0 || !items) { - callback(null, null); + callback(null, []); return; } From f48cd8125b78835196f2288876222f3cfc4c947a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9A=D0=BE=D0=B1=D1=8F=D0=BA=D0=BE=D0=B2=20=D0=A1=D0=B5?= =?UTF-8?q?=D1=80=D0=B3=D0=B5=D0=B9?= Date: Thu, 1 Dec 2016 01:58:51 +0500 Subject: [PATCH 5/6] maybe... --- flow.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/flow.js b/flow.js index 8621c17..ab06101 100644 --- a/flow.js +++ b/flow.js @@ -47,6 +47,7 @@ exports.map = function (items, operation, callback) { } var result = []; var resultCount = 0; + var errorExist = false; items.forEach(function (item, i) { operation(item, innerCallback.bind(null, i)); @@ -54,15 +55,14 @@ exports.map = function (items, operation, callback) { function innerCallback(index, err, data) { resultCount++; - if (err) { + if (err && !errorExist) { callback(err); - - return; - } - - result[index] = data; - if (resultCount === items.length) { - callback(null, result); + errorExist = true; + } else { + result[index] = data; + if (resultCount === items.length) { + callback(null, result); + } } } }; From dd4fd0ec6a350393a9150e21c04beea8c8ce055f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9A=D0=BE=D0=B1=D1=8F=D0=BA=D0=BE=D0=B2=20=D0=A1=D0=B5?= =?UTF-8?q?=D1=80=D0=B3=D0=B5=D0=B9?= Date: Fri, 2 Dec 2016 00:38:45 +0500 Subject: [PATCH 6/6] fix --- flow.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/flow.js b/flow.js index ab06101..2ce29eb 100644 --- a/flow.js +++ b/flow.js @@ -109,6 +109,9 @@ exports.filter = function (items, operation, callback) { exports.makeAsync = function (func) { return function () { setTimeout(function (args) { + if (args.length === 0) { + throw new TypeError('Missing callback'); + } var callback = args[args.length - 1]; try { callback(null, func.apply(null, args.slice(0, args.length - 1)));