一旦第一个承诺解决,就停止承诺执行
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
承诺数组,正如您正在做的那样。正如其他人指出的那样,当事情 运行 并行时,可能已经来不及召回其他已启动的操作。
我正在使用 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
承诺数组,正如您正在做的那样。正如其他人指出的那样,当事情 运行 并行时,可能已经来不及召回其他已启动的操作。