gpt4 book ai didi

javascript - 在 settimeout 内 promise

转载 作者:行者123 更新时间:2023-11-30 00:15:40 25 4
gpt4 key购买 nike

我试图在彼此延迟 1 秒的时间内运行 promise ,因为我正在使用的 API 服务器有每秒 1 个请求的限制。

这是我目前的代码

var delay = 0;
return categories.reduce(function(promise, category) {
var id = setTimeout(function() {
promise.then(function() {

return client.itemSearch({
searchIndex: configuration.SearchIndex,
CategoryID: category.id,
Keywords: currentKeyword

}).then(function(results) {
var title = results[0].Title;
var cat = category.name;
var price = results[0].Price;

return db.insertProduct(title, cat, price);
});
}).catch(function(err) {
console.log("error", err);
});

}, delay * 1000);

delay += 1;
}, Promise.resolve());

每循环一次,它都会将延迟增加一秒,这样下一个项目将以额外 1 秒的延迟开始。

所以如果它是第一项,它的 0*1 = 0,然后 1*1 = 1,然后 2*1 = 2...等等

出于某种原因,它不起作用,没有 settimeout 它可以完美地工作。

据我所知,在延迟后开始 promise 应该没有问题,除非它可能与延迟完成后没有正确值的变量有关。如果是这样,我该如何解决,也许传递变量?

我很感激能得到的每一个帮助。

最佳答案

使用 async.eachSeries ,您可以依次处理每个请求并在每个请求完成后 1 秒执行异步回调:

async.eachSeries(categories, function(category, callback) {
client.itemSearch({
searchIndex: configuration.SearchIndex,
CategoryID: category.id,
Keywords: currentKeyword
}).then(function(results) {
// we don't need to wait after the database here, just after the request
setTimeout(callback, 1000);

var title = results[0].Title;
var cat = category.name;
var price = results[0].Price;

db.insertProduct(title, cat, price);
}).catch(callback);
}, function(err) {
if (err) {
console.log('error', err);
}
});

关于javascript - 在 settimeout 内 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34819298/

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