gpt4 book ai didi

javascript - 跟踪回调并将数据作为单个数组发送出去

转载 作者:行者123 更新时间:2023-11-30 06:43:39 25 4
gpt4 key购买 nike

我有一个循环遍历每个元素并循环遍历该元素的每个属性的脚本。如果元素的属性名称与单独对象 (shims) 中的键名称匹配,它会运行 JS shim。然后 JS shim 添加到数组(错误)。在 所有 垫片(如果有任何垫片甚至运行)之后返回作为单个数组发送的数据,即

<input data-foobar="true">

shims:{
'data-foobar':function(){
//AJAX stuff...
if(there_was_an_error){
errors.push({element:ele,error:'OH NOES!'})
}
}
}

我很难全神贯注地跟踪所有这些,因为它们都相隔几毫秒,但很明显,可能需要更长的时间才能返回,因为这些是对数据库的 AJAX 调用。

我能想到的唯一方法是增加像“shimsRunning++”这样的计数器,然后检查if(shimsRunning === 0){ callback(this,errors) } .这真的是最好的方法吗?保持回调计数器等待响应似乎很笨拙...

哦,仅供引用,这些都是在点击按钮(提交)时运行的。我需要等到所有这些都做出回应,这样我才能知道是否有错误,如果有,他们在什么地方,如果没有,请提交表格。

最佳答案

听起来您需要一个不错的流程控制库。

https://github.com/caolan/async是一个受欢迎的(而且很好)。

var asyncTasks = ["a", "b"]

function runTask (task, done) {
somethingAsync(function (err) {
done(err)
})
}

async.forEachSeries(asyncTasks, runTask, function (err) {
// runs when all tasks are done
// if one of them calls done with an error,
// this will be called right away with that error
})

这将按顺序运行 runTask(当前一个完成时它将运行下一个)。如果您想并行运行它们,请查看 async.forEach。如果您想并行运行 x,请查看 async.forEachLimit。

关于javascript - 跟踪回调并将数据作为单个数组发送出去,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8677171/

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