我正在尝试以1秒的延迟相互运行承诺,因为我正在使用的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,这样下一个项目就会以1秒的延迟开始。
所以如果它是第一个项目,它的0 * 1 = 0,那么1 * 1 = 1,那么2 * 1 = 2 ...等等
出于某种原因,它不起作用,没有settimeout它完美地工作。
据我所知,延迟后启动一个承诺不应该有问题,除非它可能与延迟完成后没有正确值的变量有关。如果是这种情况,我该如何解决这个问题,或许可以传递变量?
我感谢我能得到的每一个帮助。
答案 0 :(得分:1)
使用async.eachSeries
,您可以逐个处理这些中的每一个,并在每个请求完成后1秒执行异步回调:
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:contentDescription="Main Image"
android:padding="1dp"
android:scaleType="fitXY"
android:src="@drawable/balloon" />