- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我需要实现 Promise.all
的一个版本,它接受一组 promise 并像往常一样返回结果,此外还结算所有 promise ,很像 Promise.settle
在 Bluebird
库中执行此操作,但我不能使用 Bluebird
,并且必须仅依赖于标准 promise 协议(protocol)。
实现起来会不会非常复杂?还是在这里询问如何实现它的想法太多了?我真的希望不会,所以我想问,如果有人以前实现过它,请分享如何正确实现的想法。
这样做的前提是能够在调用完成后需要执行commit
/rollback
的数据库事务中使用它,并且不能松动promises 仍在尝试在事务调用之外解决。
编辑: 提供给另一个问题的链接非常有用,但它并不是所提问题的完整答案。一个通用的 settle
是一个很好的例子,它有很大帮助,但它需要被简化并包装到 all
逻辑中以适应前面描述的事务场景。
最佳答案
我认为 jfriend 的解决方案过于复杂,因为它建立在 settle
之上,它运行一个信号量并做很多奇怪的事情,而不是使用像 这样的内置原语。所有
。
相反,如果我们构建在 Bluebird 较新的 reflect
原语(在原生 promise 中实现),我们可以获得更简洁的 API 和实现:
function reflect(promise){
return promise.then(x => ({state: "fulfilled", value: x}), // arrows, assume nodejs
e => ({state: "rejected" , value: e}));
}
在 reflect 之上,我们可以轻松构建其他原语:
function settle(promises){
return Promise.all(promises.map(reflect)); // much cleaner
}
如果我们想等待然后根据值解决/拒绝它很简单:
function allWait(promises){
return settle(promises).then(results => {
var firstFailed = results.find(r => r.state === "rejected");
if(firstFailed) throw firstFailed.value;
return results;
});
}
关于javascript - 实现 Promise.all 和 Promise.settle 的混合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32468302/
我正在关注测试 Braintree 结算状态的文档: https://developers.braintreepayments.com/reference/general/testing/php#se
我试图弄清楚我是否可以通过一些技巧从 UIScrollView 中得到我想要的东西,或者我是否需要滚动我自己的 ScrollView : 我想滚动浏览行中的一系列项目。一个项目应始终位于 View 中
我正在编写一个可以选择在 Windows 启动时运行的应用程序。 当应用程序在我的 PC 真正稳定下来之前就停滞不前时,我无法忍受,而且这是一个非关键应用程序。我希望我的应用程序礼貌地等待所有其他启动
考虑以下代码,其中包含 Bluebird 的 Promise.settle 的简化实现: var a = Promise.reject('a'); var b = Promise.resolve('b
我有以下代码: return Promise.settle(matches, imgur.uploadUrl) .map(function (inspection) { if
我目前有一个我悬停在其上的图 block 最初是模糊的。图像缩小后,这种模糊会稳定下来并在图 block 上产生不良效果。请查看我粘贴的代码。它应该让您对我在说什么有一个清晰的认识。 我尝试在图像悬停
这个问题在这里已经有了答案: Wait until all promises complete even if some rejected (20 个回答) 6年前关闭。 假设我有一个处理两个 pro
我们目前使用 bluebird v2.9.8,无法升级到 v3 以获得兼容性(目前,但这可能不会一个解决方案)。 我们过去使用过.settle(),但我们遇到过这样的情况:我们有一组用户,映射到pro
我需要实现 Promise.all 的一个版本,它接受一组 promise 并像往常一样返回结果,此外还结算所有 promise ,很像 Promise.settle 在 Bluebird 库中执行此
当我使用 Promise.map() 时,我要么得到一个 user_ids 数组,要么得到一个错误。当我使用 Promise.settle() 时,我获取的是数组的值,而不是数组中返回的 Promis
我的 React 应用程序(使用 Redux Saga)有问题,出现控制台错误: The service worker navigation preload request was cancelled
我是一名优秀的程序员,十分优秀!