gpt4 book ai didi

javascript - Bluebird , promise ,然后()

转载 作者:IT老高 更新时间:2023-10-28 21:55:05 27 4
gpt4 key购买 nike

我只使用了几天的 bluebird,但我想回顾一下我所有的旧代码并 promisify :)

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

考虑这两个 block :

一个

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

B

var promise = methodThatReturnsAPromise();
promise.then(task2)
promise.then(task3);
  1. 场景A中task3会得到task2的结果吗?在 B 中他们都得到了第一个 promise 的结果?

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

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

抱歉,这是一堆问题。

最佳答案

欢迎来到美妙的 promise 世界。

then 在您的示例中如何工作

您在 1 中的断言是正确的。我们可以在 Bluebird 中对值使用 Promise.resolve 来模拟 Promise 解析。

让我们展示一下:

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

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

foo().then(alert);

这个简短的片段将提醒 "Value"we can see .

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

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

所以,正如您在 your first code 中看到的那样它确实会在一个链中解析,每个都具有前一部分的值。

在第二个例子中,task2 和 task3 都会得到相同的值,也会一起执行(也就是说,task 3 不会等待 task 2)。你可以看到here .

Promise.all

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

捕获

你总是把 catch 放在你想捕获错误的地方。正如您通常在同步代码中所做的那样。只要记住总是抛出一个 promise 或 promise 的代码。

关于javascript - Bluebird , promise ,然后(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21298190/

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