gpt4 book ai didi

javascript - Bluebird 的 Promise.settle 未使用正确的值解析

转载 作者:搜寻专家 更新时间:2023-10-31 23:00:45 26 4
gpt4 key购买 nike

我有以下代码:

return Promise.settle(matches, imgur.uploadUrl)
.map(function (inspection) {
if (inspection.isFulfilled()) {
return inspection.value().data.link;
}
return '#';
})

上面的更详细的版本显示了同样的问题:

return Promise.settle(matches, function(match) { return imgur.uploadUrl(match); })
.then(function(results) {
return results;
})
.map(function (inspection) {
if (inspection.isFulfilled()) {
return inspection.value().data.link;
}
return '#';
})

在哪里

预期的行为是 .map 的结果是一个 promise ,在原始数组中的图像上传到 imgur(或 '#',以防万一由于任何原因上传失败)。

相反发生的是 Promise.settle 立即 解析(即似乎不等待 imgur 上传),并且 inspection.value() 是原始的matches 数组中的图像 url(在尝试读取字符串的 .data.link 属性时会出错)。

为什么会这样?为什么它不能上传到 imgur 并正确解析?

最佳答案

当我查看 Bluebird source对于 Promise.settle(),我只看到它处理第一个参数(期望一个 promises 数组)。当您希望所有 promise 都完成时,我总是将它用作 Promise.all() 的替代品,即使有些 promise 有错误。

我想知道 .settle() 的 Bluebird 文档是否错误地将函数作为第二个参数来处理第一个数组?代码有点难以理解,但我看不出 Promise.settle() 如何使用第二个参数(除非出于某种原因这不是我正在查看的正确代码).

正如您所指出的,另一种选择是:

Promise.settle(matches.map(imgur.uploadUrl)).then(...)

它只是将一组 promise 传递给 .settle()


仅供引用,我通过创建一个简单的测试用例并在调试器中进入 Promise.settle() 来验证它从不使用传递给它的第二个参数。这似乎是文档与实现不匹配的情况。我希望有人计划实现所记录的内容,但从未完成该实现。

关于javascript - Bluebird 的 Promise.settle 未使用正确的值解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26594382/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com