如何使用Async Detect Series返回节点中的输出

时间:2017-02-15 12:08:33

标签: javascript node.js series async.js

实际上,我希望在迭代数组并在其上执行方法时,根据一些异步调用返回一些输出。当我从第三方服务器获得所需的响应时,我想停止迭代并返回从服务器收到的响应。

所以为此我在节点中使用了异步包。我正在使用Detect Series来实现此目的。

这是我的电话,我正在迭代一系列元素。让我们说我正在调用一种数字方法。

async.detectSeries([1, 5, 7, 9, 6, 13, 14], checkIfEven, function(err, res) {
        callback(null, res); 
         // res should be coming
         // "Yes I found the Number 6"
         // But coming only 6
    });

所以基本上我需要的只是在找到第一个偶数时才响应,并且在迭代之后应该停止。没有进一步的执行。

以下是检查数字是否均匀的通用方法。

checkIfEven(number, callback) {
    setTimeout(function() {
        if (number % 2 == 0) {
            //Truthy Condition
            callback(null, "Yes I found the Number"+number);
        } else {
           //Falsy Condition
            callback(null, false);
        }
    }, 1000);
}

基于该返回字符串

  

“是的,我找到了号码”+号码找到了

这样的东西,我控制的反应。但我所得到的只是数字本身的成功回调。在这种情况下,它将是6。

所以它只是返回首先通过测试的数组中的数字。服务器识别号码的目的只有一半,但是假设我想要在参数上应用方法后得到的响应。

请让我知道我哪里出错了。或任何其他更好的方法来解决这个问题,谢谢

1 个答案:

答案 0 :(得分:0)

使用detectSeries时, iteratee 的回调函数需要一个布尔值,并且最终结果将包含通过测试的数组项,而不是您调用该函数的值。打回来。您传递给它的任何字符串都将简单地插入为true

checkIfEven上,仅返回truefalse

在带有callback内容的最终回调中调用res

function checkIfEven(number, callback) {
    setTimeout(function() {
        if (number % 2 == 0) {
            //Truthy Condition
            callback(null, true);
        } else {
           //Falsy Condition
            callback(null, false);
        }
    }, 1000);
}

async.detectSeries([1, 5, 7, 9, 6, 13, 14], checkIfEven, function(err, res) {
    callback(null, "Yes I found the Number " + res);
});