我使用的是kriskowal q实现。
我有一个数据对象数组,每个对象都有一个id。
我需要将这些顺序链接到承诺中,因为我遵守速率限制规则,将其设置为每秒1个请求。
然而,我在解决承诺方面遇到了困难,我的功能也停滞了。也就是说,我看到了addVideo、getInfo、retryIfNeeded的输出,以及第一个视频的1秒延迟,但我没有看到任何后续视频的延迟。
我想做的是在延迟之后,解决这个链,以便在第二个视频ID上继续下一个承诺列表。
我该怎么做?我做错了什么?我在谷歌上搜索了很多,但还没有找到解决方案,所以任何建议都欢迎
编辑添加的jsfiddle:http://jsfiddle.net/gpa7ym18/4
var promiseChain = data.items.reduce(function(promise, video) {
video.type = type;
return promise
.then(addVideo)
.then(getInfo)
.then(retryIfNeeded)
.then( function() {
return q.delay(1000)
.done(function() {
NEED TO RESOLVE HERE but there is NO Defered object
to set defer.resolve. How do I resolve this promise chain?
});
});
}, q.resolve(data.items[0]));
您不需要解决任何问题。
你应该简单地返回延迟的承诺,这将成为整个链条的价值
这正是承诺链的工作原理。