我正在使用ES6承诺,这个功能的想法是遍历链接数组,并为每个链接查找图像并在找到图像后停止。
在我编写的函数的这种情况下,最快的promise会解析,而其他的会继续执行,所以我想要的是在第一个promise解析后立即停止执行剩余的promise。
scrapImage(links) {
let promises = links.map((l) => getImageUrlAsync(l));
return Promise.race(promises);
}
答案 0 :(得分:4)
承诺不执行"。他们会返回值,而不是函数。承诺不是任何函数返回一个的控制表面。听起来你想要取消getImageUrlAsync()
,所以我会在任何API中寻找取消API。
如果没有这样的取消API,您可以做的最好的就是承诺数组Promise.race
,就像您正在做的那样。正如其他人所指出的那样,当事情并行运行时,回想起其他已发起的行动可能为时已晚。
答案 1 :(得分:1)
我会说没有办法停止执行 因为所有的承诺都是在使用Promise.race的同时开始的。
尝试使用循环,例如while。
使用ES7的一些示例代码,如果您使用的是babel。
async doSomething(links) {
let l = links.length;
while (l--) {
let res = await getImageUrlAsync(links[l]);
if (res) {
break;
}
}
}