Tag: 蓝鸟

什么是蓝鸟诺言相当于本地ES6承诺最后?

蓝鸟提供了一个“终于”的方法,被称为无论发生在你的诺言链。 我发现它非常方便,用于清理目的(如解锁资源,隐藏装载程序…) ES6原生承诺中是否有相同的内容? 以下是Finally方法的文档参考: http://bluebirdjs.com/docs/api/finally.html 谢谢

我如何判断一个对象是否是一个Promise?

无论是ES6承诺还是蓝鸟承诺,Q承诺等等。 我如何testing以查看给定对象是否是Promise?

Bluebird的util.toFastProperties函数如何使对象的属性“快速”?

在Bluebird的util.js文件中 ,它有以下function: function toFastProperties(obj) { /*jshint -W027*/ function f() {} f.prototype = obj; ASSERT("%HasFastProperties", true, obj); return f; eval(obj); } 出于某种原因,返回函数之后有一个声明,我不知道为什么它在那里。 同样,这似乎是故意的,因为提交人已经沉默了JSHint对此的警告: “返回”后无法到达'eval'。 (W027) 这个函数到底做了什么? util.toFastProperties是否真的使对象的属性“更快”? 我已经通过Bluebird的GitHub仓库search了源代码中的任何评论或者在他们的问题列表中的解释,但我找不到任何。

现在是否还有使用Q或BlueBird等承诺库的理由,因为我们拥有ES6承诺?

在Node.js添加了对promise的本地支持之后,是否还有理由使用像Q或者BlueBird这样的库? 例如,如果您正在开始一个新项目,并假设在这个项目中没有任何使用这些库的依赖关系,那么我们可以说没有更多的理由来使用这样的库吗?

由于非平行等待asynchronous生成器中的承诺而导致速度放慢

我正在使用生成器和蓝鸟编写代码,我有以下几点: var async = Promise.coroutine; function Client(request){ this.request = request; } Client.prototype.fetchCommentData = async(function* (user){ var country = yield countryService.countryFor(user.ip); var data = yield api.getCommentDataFor(user.id); var notBanned = yield authServer.authenticate(user.id); if (!notBanned) throw new AuthenticationError(user.id); return { country: country, comments: data, notBanned: true }; }); 但是,这是一种缓慢,我觉得我的应用程序正在等待太多的I / O,它不是并行的。 我怎样才能提高我的应用程序的性能? 对于countryFor + 400来说,对于getCommentDataFor + 600来说,总的响应时间是800,因此在总共1800毫秒内是很多的。

虽然循环使用蓝鸟承诺

我正在尝试使用承诺实现一个while循环。 这里概述的方法似乎工作。 http://blog.victorquinn.com/javascript-promise-while-loop它使用这样的function var Promise = require('bluebird'); var promiseWhile = function(condition, action) { var resolver = Promise.defer(); var loop = function() { if (!condition()) return resolver.resolve(); return Promise.cast(action()) .then(loop) .catch(resolver.reject); }; process.nextTick(loop); return resolver.promise; }; 这似乎使用反模式和弃用的方法,如投和延期。 有没有人知道一个更好或更现代的方式来实现这一目标? 谢谢

解决父承诺中的一系列承诺

这是我在嵌套承诺的第一枪。 我正在使用蓝鸟图书馆,但我认为这个想法对所有的承诺库都是一样的。 在高层次上,这是我想要做的: myService.getSomeData(url) .then((data) => { myOtherService.getMoreData(data.uniqueId) .then((thisDataIsAnArray) => { //loop over the data above and do something }); }); getMoreData()应该使X服务调用并将结果存储在数组X元素long中。 这是我开始迷失的地方,因为我不知道如何制定这个方法,我应该从中返回。 我已经对蓝鸟的Promise.all和Promise.map采取了一些刺激,但我很挣扎,并认为我会征求意见。

正确的方式来编写承诺的循环。

如何正确构造一个循环,以确保以下承诺调用和链式logger.log(res)通过迭代同步运行? (蓝鸟) db.getUser(email).then(function(res) { logger.log(res); }); // this is a promise 我尝试了以下方法(方法从http://blog.victorquinn.com/javascript-promise-while-loop ) var Promise = require('bluebird'); var promiseWhile = function(condition, action) { var resolver = Promise.defer(); var loop = function() { if (!condition()) return resolver.resolve(); return Promise.cast(action()) .then(loop) .catch(resolver.reject); }; process.nextTick(loop); return resolver.promise; }); var count = 0; promiseWhile(function() { return count < 10; […]

什么时候。(成功,失败)认为是一个反模式的承诺?

我看了蓝鸟许诺常见问题 ,其中提到.then(success, fail)是一个反模式 。 对于尝试和捕捉我不太了解它的解释。 这是什么问题? some_promise_call() .then(function(res) { logger.log(res) }, function(err) { logger.log(err) }) 看来,这个例子是build议以下作为正确的方式。 some_promise_call() .then(function(res) { logger.log(res) }) .catch(function(err) { logger.log(err) }) 有什么不同?

不是承诺只是callback?

我一直在开发JavaScript几年,我根本不明白承诺的大惊小怪。 看来我所做的只是改变: api(function(result){ api2(function(result2){ api3(function(result3){ // do work }); }); }); 我可以使用类似asynchronous的库,像这样: api().then(function(result){ api2().then(function(result2){ api3().then(function(result3){ // do work }); }); }); 哪些是更多的代码和更less的可读性。 我在这里没有获得任何东西,也不是突然神奇的“平坦”。 更不用说把事情转化为承诺。 那么,在这里承诺有什么大惊小怪呢?