我只使用了bluebird几天,但是我想遍历所有旧代码及其promisify
:)
我的问题是我仍然没有完全掌握then()
命令的流程。
考虑以下两个块:
一个
methodThatReturnsAPromise().then(task2).then(task3);
乙
var promise = methodThatReturnsAPromise();
promise.then(task2)
promise.then(task3);
在方案A task3
中将得到的结果task2
?在B中,他们都得到了第一个承诺的结果?
第二个与Promise.all
从bluebird 运行有何不同?
这些A / B / Promise.all
在使用catch
方法方面有何不同(我在哪里放置它)。
抱歉,这是一堆问题。
欢迎来到美好的承诺世界。
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放在要捕获错误的位置。正如您通常在同步代码中那样。只要记住要始终兑现承诺或承诺代码。
蓝鸟是功能齐全的承诺库,侧重于创新功能和性能 请参阅bluebird网站以获取更多文档,参考资料和说明。请参阅此处的API参考。 有关bluebird 2.x文档和文件,请参见2.x树。 注意 Node.js 10中的承诺比以前快得多。蓝鸟仍然包括许多功能,例如取消,迭代方法和本机承诺不提供的警告。如果您使用Bluebird来获得性能而不是性能-请考虑提供原生承诺并自行运行基准测试。
问题内容: 我正在关注Stephen Grinder的教程,在那里他开始使用Promisify。 为此,他给出了非常模糊的解释,说redis需要回调函数,并且他发现非常不整洁+ redis不支持NodeJS中的promises。 然后他做了这样的事情 出于某种原因,我发现该解释含糊不清,有人可以以最人性化的方式进行解释吗?像他的意思和我们在做什么? 问题答案: 当您要将回调函数转换为基于promi
问题内容: 是否有人使用过nodejs模块“ deferred”和“ mongoose”?我试图让deferred.promisify方法可以在猫鼬模型的函数上工作,以便我可以轻松地将它们链接起来,但是会遇到一些麻烦。具体来说,我想对和函数进行赋值处理,以便可以通过ObjectID链接查找另一个文档引用的一个文档。 这就是我所拥有的:https : //gist.github.com/332182
问题内容: 现在,父级for循环()在第一个findOne触发之前完成,因此,这仅循环通过repliesIDsArray..asynchronous。的最后一个元素。 此代码集的承诺版本的正确语法是什么?Promisification的新手,想知道如何开始Promisify +遍历数组+解释if语句。 蓝鸟是必需的,并且被调用。 问题答案: 正如本杰明所说,不要使用循环,而应使用(或) 在此处查看
问题内容: 我找到了一个使用Promise的现有库,但是它不使用bluebird。库函数并没有bluebird喜欢或拥有的所有其他功能。如何将“正常”或“非蓝鸟”承诺转换为具有蓝鸟提供的所有其他功能的蓝鸟承诺? 我试过包装在现有的承诺,并和他们俩谁也没工作。 问题答案: 使用-它会占用所有可能的内容,例如来自其他一些实现的承诺,并将其吸收到Bluebird承诺中。 请记住,“解决”一词可能会误导您
转换一个异步函数,以返回一个 promise 。 使用柯里化返回一个函数,这个函数返回一个调用原始函数的 Promise 。 使用 ...rest 运算符传入所有参数。 在 Node 8+ 中,你可以使用 util.promisify const promisify = func => (...args) => new Promise((resolve, reject) => func