【问题标题】:aysnc.forEachSeries only iterates on first element if element value is passed into callbackasync.forEachSeries 仅在将元素值传递给回调时迭代第一个元素
【发布时间】:2018-06-20 07:50:47
【问题描述】:

以下代码尝试使用 forEachSeries 迭代数组 "a,s,d,f".split(',')通过回调打印每次迭代的元素,但打印的唯一值是第一个元素的 iea它省略了打印 s、d 和 f。 如何让它打印所有元素?

var async = require('async');
async.forEachSeries(
    "a,s,d,f".split(','),
    function (el,cb) {
        console.log(el);
        cb(el); //<-----------    NOTE: VALUE IS PASSED IN HERE - "STOPS AT FIRST ITERATION"                  
    },
    function (el) {
        console.log(el)
    }
);
console.log('x');

以下是输出:

a
a
x

但是,如果在将代码编辑为未在回调中传递值的代码时,则会打印所有值以及额外的null

以下是代码和输出

var async = require('async');
async.forEachSeries(
    "a,s,d,f".split(','),
    function (el,cb) {
        console.log(el);
        cb(); //<-----------    NOTE: NO VALUE IS PASSED IN HERE - "WORKS FINE"         
    },
    function (el) {
        console.log(el)
    }
);

console.log('x');

输出

a
s
d
f
null
x

【问题讨论】:

    标签: javascript node.js async.js


    【解决方案1】:

    好的,这超出了我对回调功能的理解,第一个 arg 显然是被视为错误。以下编辑工作:

    var async = require('async');
    async.forEachSeries(
        "a,s,d,f".split(','),
        function (el,cb) {
            console.log(el);
            cb(null,el); // first arg as NULL proceeds to all iterations                  
        },
        function (err,el) {
            console.log(el)
        }
    );
    console.log('x');
    

    输出:

    a
    s
    d
    f
    in cb
    x
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-01
      • 2019-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-26
      • 1970-01-01
      相关资源
      最近更新 更多