gpt4 book ai didi

javascript - 让 forEach 等待回调

转载 作者:行者123 更新时间:2023-11-30 08:28:39 24 4
gpt4 key购买 nike

异步编程的新手,所以我不知道该怎么做:

$results = [];

products.forEach(function (product) {

// 1. Search ...
google(keyword, function (err, res) {
if (err) console.error(err)

for (var i = 0; i < res.links.length; ++i) {
var result = res.links[i];
var obj = {
title: res.links[i].title,
href: res.links[i].href,
description: res.links[i].description
}
results.push(obj); // 2. store each result in results Array
}
}, processData); // 3. send all results to processData when done

// 5. NOW, itereate further ...

});

function processData(results) {
console.log('processing data');
// 4. save results to DB
}

由于该过程需要发出 HTTP 请求、收集数据然后保存到数据库,这都需要时间,所以我不希望 forEach 在一个完成之前前进到下一个元素。

最佳答案

使用async包。

async.eachSeries(docs, function iteratee(product, callback) {
// 1. Search ...
google(keyword, function (err, res) {
if (err) {
console.error(err)
callback(results) // this will send a fail callback.
}
for (var i = 0; i < res.links.length; ++i) {
var result = res.links[i];
var obj = {
title: res.links[i].title,
href: res.links[i].href,
description: res.links[i].description
}
results.push(obj); // 2. store each result in results Array
callback(null, results) // this is a success callback
}
}, processData); // 3. send all results to processData when done
});

注意:回调的行为类似于返回。一旦回调满足该值,它就不会再继续了。现在它将发送下一个产品的请求。

关于javascript - 让 forEach 等待回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41179396/

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