当前位置: 首页 > 面试题库 >

bluebird,promisify和then()

养研
2023-03-14
问题内容

我只使用了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方法方面有何不同(我在哪里放置它)。

抱歉,这是一堆问题。


问题答案:

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

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