gpt4 book ai didi

node.js - 下划线 : async each loop waiting "inside"

转载 作者:搜寻专家 更新时间:2023-11-01 00:11:58 25 4
gpt4 key购买 nike

我如何在循环中等待回调更改变量,并仍然使用异步性?

第二个示例使用异步,在这种情况下我不知道如何将第二个参数 sum 添加到 wait,以避免全局变量 求和。像 wait(sum,value); 一样调用,返回值 sum

wait 是一个复杂函数的表示,我在我的实际问题中使用它,所以它不能被重写为“内联”代码并且必须保持“功能”。

示例 1:

var _ = require('underscore');
var arr = [1,2,3,4,5,6,7];
var sum = 0;

function wait(item,callback) {
setTimeout(function() {
callback(item);
}, Math.ceil(Math.random()*1000));
}

var done = _.after(arr.length,function(value) {
console.log('sum ='+value);
})

_.each(arr,function(itm) {
wait(itm,function(value) {
console.log('waiting... '+value);
sum = sum + value;
})
// Please wait for the callback
console.log(itm);
done(sum);
});

例子2:

function asyncExample2() {
var async = require('async');
var arr = [1,2,3,4,5,6,7];

function otherWait(item, callback) {
setTimeout(function() {
callback(item); // call this when you're done with whatever you're doing
}, Math.ceil(Math.random()*1000));
}

function wait(item, callback) {
setTimeout(function() {
otherWait(item,function() {
console.log(item);
});
callback(item);
}, Math.ceil(Math.random()*1000));
}

function done() { console.log("sum = "+sum);};

var sum = 0;
async.forEach(arr, wait, done);
}

期望的调用:

sum = wait(sum,item) 

最佳答案

最简单的方法是将done 放入函数wait 中。它使 done 仅在最后一个 callback 执行后被调用。

var arr = [1,2,3,4,5,6,7];
var sum = 0;

function wait(item,callback) {
setTimeout(function() {
callback(item);
done(sum);
}, Math.ceil(Math.random()*1000));
}

var done = _.after(arr.length,function(value) {
console.log('sum ='+value);
})

_.each(arr,function(itm) {
wait(itm,function(value) {
console.log('waiting... '+value);
sum = sum + value;
})
// Please wait for the callback
console.log(itm);
//done(sum);
});

输出:

enter image description here

关于node.js - 下划线 : async each loop waiting "inside",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19315879/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com