获取x项

时间:2017-08-23 16:28:54

标签: javascript promise fetch bluebird cancellation

我正在尝试获取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,所以我认为这与我狡猾的代码有关。

感谢任何帮助:)

1 个答案:

答案 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后取消任何进一步的承诺。只要解决了所需数量的承诺,这将立即实现。