Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用异步检测序列在节点中返回输出_Javascript_Node.js_Series_Async.js - Fatal编程技术网

Javascript 如何使用异步检测序列在节点中返回输出

Javascript 如何使用异步检测序列在节点中返回输出,javascript,node.js,series,async.js,Javascript,Node.js,Series,Async.js,实际上,我希望在迭代数组并对其执行方法时,基于一些异步调用返回一些输出。当我从第三方服务器得到所需的响应时,我希望停止迭代并返回从服务器收到的响应 为此,我在node中使用了异步包。我正在为此目的使用 这是我的调用,我正在迭代一个元素数组。假设我正在调用一个数字数组上的方法 async.detectSeries([1, 5, 7, 9, 6, 13, 14], checkIfEven, function(err, res) { callback(null, res);

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

为此,我在node中使用了异步包。我正在为此目的使用

这是我的调用,我正在迭代一个元素数组。假设我正在调用一个数字数组上的方法

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

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


请告诉我哪里出了问题。或者任何其他更好的方法来解决这个问题,感谢当使用
检测时,迭代对象的回调需要一个布尔值,最终结果将包含通过测试的数组项,而不是调用回调时使用的值。传递给它的任何字符串都将被解释为
true

checkIfEven
上,仅返回
true
false

使用
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);
});

使用
detectSeries
时,迭代对象的回调需要一个布尔值,最终结果将包含通过测试的数组项,而不是调用回调时使用的值。传递给它的任何字符串都将被解释为
true

checkIfEven
上,仅返回
true
false

使用
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);
});

使用
回调(“找到的数字”+number)
而不是
回调(null,“找到的数字”)
,当错误为null时,循环将迭代到下一个元素。如果循环遇到错误,则调用最后一个回调。
当错误为null时,循环将迭代到下一个元素
对于
检测序列
,这是不正确的。Async的文档说明,只要任何迭代器返回true,或在所有迭代器函数完成后,就会调用最终回调。使用
回调(“找到的数字”+number)
而不是
回调(null,“找到的数字”)
,当错误为null时,循环将迭代到下一个元素。如果循环遇到错误,则调用最后一个回调。
当错误为null时,循环将迭代到下一个元素
对于
检测序列
,这是不正确的。Async的文档说明,只要任何迭代器返回true,或者在所有迭代器函数完成后,就会调用最终回调。