gpt4 book ai didi

javascript - 递归异步 api 调用

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

我正在从事一个需要使用 Twitter API 的项目。试图返回给定用户的所有关注者。问题是让所有用户 bc twitter 将关注者分成最多 200 个 block 。

我在网上看到一个解决方案,他们递归地调用回调,但是我在尝试使用 promises 来获取所有数据之前遇到困难,然后再继续。目前它等待第一页返回,但不知道如何让它等待所有 promise 返回。有人可以给我任何提示/技巧吗?是否有办法迭代地执行此操作?

let cursor = -1;
let promise = new Promise((resolve,reject)=>{
twitter.followers({cursor},function callback(data, error){
if(error)
reject(false)
cursor = data.next_cursor;
if(cursor!=0){
new Promise((resolve,reject)=>{
twitter.followers({cursor},callback)
})
resolve(true);
}
})
})
promise.then({
//do stuff
})

最佳答案

你很接近,但你的方法只需要一些调整:

  • 当出现错误时,除了reject()
  • 之外不要做任何事情
  • 不要创建新的嵌套 promise ,而是使用当前 promise :将 resolve()(或 reject())的任何调用延迟到下一个调用回调。
  • 仅在光标到达 0 时执行 resolve()
  • 最后的 then 需要一个回调参数,而不是对象字面量。

这是调整后的代码(使用 twitter.followers 的虚拟实现来使其工作):

// Mock implementation, for the snippet to work:
var twitter = {
followers: function (obj, callback) {
setTimeout(function () {
callback({
next_cursor: (obj.cursor + 5) % 6
}, 0);
}, 100);
}
}

let cursor = -1;
let promise = new Promise((resolve,reject)=>{
twitter.followers({cursor}, function callback(data, error){
if (error) {
reject(false)
return; // Don't continue after error
}
cursor = data.next_cursor;
console.log(cursor);
if (cursor != 0){
// Don't create a new promise, just delay to resolve
twitter.followers({cursor}, callback)
return; // don't resolve now
}
resolve(true);
})
})
promise.then(function () { // You need a callback function here
console.log('all done');
})

关于javascript - 递归异步 api 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44213755/

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