【发布时间】:2016-06-29 17:51:04
【问题描述】:
我使用的是 ES6 Promise,这个函数的想法是遍历链接数组,并为每个链接查找图像并在找到图像后停止。
在我编写的函数的这种情况下,最快的 Promise 会解析并且其他 Promise 会继续执行,所以我想要的是在第一个 Promise 解析后立即停止执行剩余的 Promise。
scrapImage(links) {
let promises = links.map((l) => getImageUrlAsync(l));
return Promise.race(promises);
}
【问题讨论】:
-
这样做的目的是什么?你真正想要达到的目标是什么? ES6 Promise 不可取消,但一些第三方 Promise 库(如 Bluebird)支持取消。
-
我想在第一个解决后停止执行承诺,如果 es6 承诺无法做到这一点,我该如何实现?
-
不,目的不明确。 为什么你想停止承诺的执行?这有什么作用?
-
假设
getImageUrlAsync()为数组的每个元素做了很多工作,一旦我得到结果就停止执行其他承诺以获得更好的性能是不合理的吗? -
当你知道你想取消其他承诺时,假设
getImageUrlAsync是一个ajax调用,请求已经被发送出去,服务器已经开始处理它了。您可以取消请求,但这不会阻止服务器继续处理它。如果服务器端在处理请求时开销很大,而您想取消请求,则需要某种特殊机制来提醒服务器中止处理。总而言之,除非在特殊情况下,否则似乎不值得麻烦。
标签: javascript promise es6-promise cancellation