一旦第一个承诺解决,就停止承诺执行

Stop promises execution once the first promise resolves

我正在使用 ES6 promises,这个函数的想法是遍历 link 的数组,并为每个 link 查找图像并在找到图像后停止。

在我编写的函数的这种情况下,最快的 promise 已解决,其他 promise 继续执行,所以我想要的是在第一个 promise 解决后立即停止执行其余的 promise。

scrapImage(links) {
  let promises = links.map((l) => getImageUrlAsync(l));
  return Promise.race(promises);
}

我会说没有办法停止执行 '因为使用 Promise.race.

时所有承诺同时开始

尝试使用循环,例如while

一些使用 ES7 的示例代码,如果您使用的是 babel。

async doSomething(links) {
  let l = links.length;
  while (l--) {
    let res = await getImageUrlAsync(links[l]);
    if (res) {
      break;
    }
  }
}

承诺不会"execute"。它们是 return 值,而不是函数。承诺不是 return 任何函数的控制面。听起来你想取消 getImageUrlAsync(),所以我会在 API 中寻找取消 API。

如果没有这样的取消 API,您能做的最好的就是 Promise.race 承诺数组,正如您正在做的那样。正如其他人指出的那样,当事情 运行 并行时,可能已经来不及召回其他已启动的操作。