我只使用了bluebird几天,但是我想遍历所有旧代码及其promisify:)
promisify
我的问题是我仍然没有完全掌握then()命令的流程。
then()
考虑以下两个块:
一个
methodThatReturnsAPromise().then(task2).then(task3);
乙
var promise = methodThatReturnsAPromise(); promise.then(task2) promise.then(task3);
在方案A task3中将得到的结果task2?在B中,他们都得到了第一个承诺的结果?
task3
task2
第二个与Promise.all从bluebird 运行有何不同?
Promise.all
这些A / B / Promise.all在使用catch方法方面有何不同(我在哪里放置它)。
catch
抱歉,这是一堆问题。
欢迎来到美好的承诺世界。
then
您的主张1正确。我们可以使用Promise.resolve一个值在Bluebird中模拟一个承诺解决。
1
Promise.resolve
让我们展示一下:
让我们得到一个返回诺言的函数:
function foo(){ return Promise.resolve("Value"); } foo().then(alert);
"Value"如我们所见,此简短片段将引起注意。
"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)用于等待多个结果全部完成。在您的示例中,您希望将一个结果分为多个部分。
.spread
您总是将catch放在要捕获错误的位置。正如您通常在同步代码中那样。只要记住要始终兑现承诺或承诺代码。