一尘不染

bluebird,promisify和then()

node.js

我只使用了bluebird几天,但是我想遍历所有旧代码及其promisify:)

我的问题是我仍然没有完全掌握then()命令的流程。

考虑以下两个块:

一个

methodThatReturnsAPromise().then(task2).then(task3);

var promise = methodThatReturnsAPromise();
promise.then(task2)
promise.then(task3);
  1. 在方案A task3中将得到的结果task2?在B中,他们都得到了第一个承诺的结果?

  2. 第二个与Promise.all从bluebird 运行有何不同?

  3. 这些A / B / Promise.all在使用catch方法方面有何不同(我在哪里放置它)。

抱歉,这是一堆问题。


阅读 218

收藏
2020-07-07

共1个答案

一尘不染

欢迎来到美好的承诺世界。

then在您的示例中如何工作

您的主张1正确。我们可以使用Promise.resolve一个值在Bluebird中模拟一个承诺解决。

让我们展示一下:

让我们得到一个返回诺言的函数:

function foo(){
    return Promise.resolve("Value");    
}

foo().then(alert);

"Value"我们所见,此简短片段将引起注意。

现在,让我们再创建两个promise,每个promise都会发出警报并返回不同的值。

function task2(e){
    alert("In two got " + e);
    return " Two ";
}
function task3(e){
    alert("In three got " + e);
    return " Three ";
}

因此,正如您在第一个代码中看到的那样,它确实将在链中解析,每个解析都具有前一部分的值。

在第二个示例中,task2和task3将获得相同的值,并且也将一起执行(也就是说,任务3将不等待任务2)。您可以在这里看到。

无极

Promise.all(或仅从then实现处理程序返回一个数组,然后使用.spread)用于等待多个结果全部完成。在您的示例中,您希望将一个结果分为多个部分。

抓住

您总是将catch放在要捕获错误的位置。正如您通常在同步代码中那样。只要记住要始终兑现承诺或承诺代码。

2020-07-07