gpt4 book ai didi

node.js - 异步nodejs中的每个变量范围

转载 作者:搜寻专家 更新时间:2023-10-31 23:59:39 25 4
gpt4 key购买 nike

我正在使用 async each 循环遍历并构建一个名为 coupon_bo 的对象。令人惊讶的是,在 processbo 函数中,我看到了一个副作用,即只有 coupon_bo 对象的最后一个副本可用于 processbo 函数。

我的理解是,由于 coupon_bo 是每次迭代的本地对象,因此应该有一个新的对象进行迭代。

我错过了什么吗?

function hitApplyLogic(coupon_names, coupons_list, req, callback) {
async.each(coupon_names, function(coupon_name, callback) {
var coupon_bo = new coupon_objects.CouponsBO();
coupon_bo.incoming_request = req.body;
coupon_bo.incoming_request['coupon_code'] = coupon_name.cn;
coupon_bo.incoming_request['list_offers'] = true;

setTimeout(function()
{
console.log("CONSOLE-BO: " + JSON.stringify(coupon_bo));

}, 1000);
});
}

最佳答案

async.each 不能保证按顺序运行任务。

根据 documentation:

Note, that since this function applies iteratee to each item in parallel, there is no guarantee that the iteratee functions will complete in order.

我不确定您所说的 processbo 函数是什么意思。但是 var coupon_bo 对于运行的迭代器的每个实例应该是唯一的。所以应该没有被其他覆盖的问题。

我也不确定您为什么要在 1 秒后使用 setTimeout 记录 coupon_bo

我确实发现你的实现中缺少一些东西,那就是在迭代器中调用 callback 函数 async.each(coupon_names, function(coupon_name, callback) {

如果不调用它,您将永远停留在 async.each

function hitApplyLogic(coupon_names, coupons_list, req, callback) {
async.each(coupon_names, function(coupon_name, eachCallback) { //Changed callback to eachCallback to avoid confusion with the one received in hitApplyLogic
var coupon_bo = new coupon_objects.CouponsBO();
coupon_bo.incoming_request = req.body;
coupon_bo.incoming_request['coupon_code'] = coupon_name.cn;
coupon_bo.incoming_request['list_offers'] = true;

setTimeout(function()
{
console.log("CONSOLE-BO: " + JSON.stringify(coupon_bo));
eachCallback(null); // Finished doing all the work with this particular coupon_name
}, 1000);
},
, function(err) { //This function is called once all the coupon_names were processed

if(err) {
// One of the coupon_names returned an error
console.log('One of the coupon_names returned an error');
return callback(err); // Callback received in hitApplyLogic
} else {
// Everything went OK!
console.log('All coupons were constructed');
return callback(null); // Callback received in hitApplyLogic
});
}

关于node.js - 异步nodejs中的每个变量范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39809331/

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