我正在尝试获取X个库存商品,一旦我拥有它们,我就不想再获取了。到目前为止,这是我的代码:
const numberOfInstockItemsToShow = 10;
let inStockCount = 0;
let cancellablePromise;
const promises = data.map((item) => {
return fetch(url, options).then((res) => {
if (res.ok) {
return res.json()
}
}).then((d) => {
inStockCount++;
if (inStockCount >= numberOfInstockItemsToShow) {
cancellablePromise.cancel();
}
return d;
});
});
cancellablePromise = Promise.all(promises).then((d) => {
console.log("all the files were created:", d);
});
我在配置中将取消设置为true,所以我认为这与我狡猾的代码有关。
感谢任何帮助:)
答案 0 :(得分:2)
您可以使用Promise.some([...], count)
。第一个参数是一个数组,第二个参数是要考虑满足的一些已解决的承诺。 Reference
const numberOfInstockItemsToShow = 10;
const promises = data.map((item) => {
return fetch(url, options).then((res) => {
if (res.ok) {
return res.json()
}
});
});
Promise.some(promises, numberOfInstockItemsToShow).then((d) => {
console.log("all the files were created:", d);
});
请注意,这不会在到达count
后取消任何进一步的承诺。只要解决了所需数量的承诺,这将立即实现。