【问题标题】:In node with Q, something between 'Spread' and 'allSettled'?在带有 Q 的节点中,“Spread”和“allSettled”之间有什么关系?
【发布时间】:2015-09-11 07:24:21
【问题描述】:

我发现在 Q 中非常有用的是 Q.allSettled 函数,它可以让你在没有 fail 处理程序的情况下处理失败的情况。

另一方面,如果某些承诺失败,我现在需要使用Q.spread 函数将一些承诺和一些参数传播到then 处理程序,而无需到达fail 处理程序。

可能的解决方案是 Q 的文档中建议的解决方案:

q.allSettled([saveToDisk(), saveToCloud(), 12345])
.spread(function (disk, cloud, somenum) {
    console.log('somenum: ' + somenum.value);
    console.log("saved to disk:", disk.state === "fulfilled");
    console.log("saved to cloud:", cloud.state === "fulfilled");
});

但我想知道,图书馆是否提供类似的东西,比如Q.spreadSettled? 如果没有,是否有计划?我是唯一一个认为拥有这样的东西可能是个好主意的人吗?

【问题讨论】:

  • 你使用的是什么版本的节点?
  • 10.35,为什么?我的问题更像是一个与 Q 相关的问题,但我猜你想提出其他库,对吧?
  • 好吧,JavaScript 有本地传播,Q.spread 只是它的一个垫片。 Q 是一个旧库,我不会使用它,但这不是我的意思。节点 4.0.0 是一个选项吗?
  • 并非如此,ATM Q 是非常强制性的。出于好奇,你的建议是什么?
  • 您能否发布其中一种可行的解决方法?我还是不明白你在找什么。和Q.allSettled([…]).spread(function(…){…})有什么区别?

标签: javascript node.js promise q


【解决方案1】:

这没有意义,因为 Q.allSettled([...]) 不负责决定如何传递解析的值,而是由链接到它的方法决定。

Q.allSettled([...]) 后面可以跟两个:

.spread(function(comma, separated, resolved, values){...})

.then(function(arrayOfResolvedValues){...})

如果不链接方法,您将永远看不到 Q.spreadSettled([...]) 的解析值

【讨论】:

    猜你喜欢
    • 2020-07-27
    • 2014-04-06
    • 2019-07-10
    • 2019-10-06
    • 2013-10-30
    • 2015-01-02
    • 2012-07-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多