【发布时间】:2017-12-14 20:56:17
【问题描述】:
我有一个函数可以进行 ajax 调用并用结果解决一个承诺。不幸的是,API 将结果限制为 100,我需要使用偏移参数来获取下一个 100,依此类推。在解决承诺之前,如何进行所有需要的 ajax 调用(API 响应提供值的总数,以便我可以确定要进行的调用次数)?
这是我用来获取前 100 个然后解析的函数:
let currentOffset = 0;
let totalCount;
let offsetCount;
const makeCall = function(camp) {
return new Promise(function(resolve, reject) {
api.get(camp, currentOffset, e => {
totalCount = e.totalCount;
offsetCount = Math.floor(totalCount / 100)
let payload = e.payload;
for (var a in payload) {
myArray.push({
'id': payload[a].id,
'text': payload[a].text,
'url': ads[a].url,
});
}
resolve();
});
});
};
【问题讨论】:
-
通过多次调用
makeCall来创建多个promise,然后使用Promise.all创建另一个promise,该promise 会在所有完成后解析。不要自己写逻辑。 -
假设
payload是一个数组,don't use afor…inenumeration! -
听起来您不知道确切应该退回多少物品,并且您想根据退回的物品数量来确定?如果您期望更多结果,您可以在第一个承诺中做出新的承诺。 (这可以做成一个函数,以便您创建的所有承诺都可以在仍有项目的情况下进行后续承诺)。缺点是这可能会更慢,因为您需要等到每个完成才能进入下一个
-
@MariosHadjimichael 如果需要两个以上的 API 调用,您能否澄清一下将 Promise 放入 Promise 中的样子
标签: javascript ajax es6-promise