Tag: 蓝鸟

什么是承诺处理器模式?

我已经读了几个地方的承诺处理器模式,但我不知道它是什么。 有人build议我在代码中使用它,如下所示: function getDb(){ return myDbDriver.getConnection(); } var users = getDb().then(function(conn){ return conn.query("SELECT name FROM users").finally(function(users){ conn.release(); }); }); 什么是承诺处理器模式,它在这里如何适用? 注意 – 在本地的承诺中,我.finally “添加拒绝和履行处理程序,返回价值,但执行一个行动”。 在这种情况下,我正在使用蓝鸟。

定义像Q中的空蓝鸟许诺

用QI可以定义一个新的承诺: var queue = q(); 但是,如果我这样做,蓝鸟: var queue = new Promise(); 我得到: TypeError: the promise constructor requires a resolver function 我怎样才能得到和Q一样的结果? 这是我的代码片段: var queue = q() promises = []; queue = queue.then(function () { return Main.gitControl.gitAdd(fileObj.filename, updateIndex); }); // Here more promises are added to queue in the same way used above… promises.push(queue); return Promise.all(promises).then(function […]

if-elsestream入promise(蓝鸟)

这是我的代码的简短版本。 var Promise = require('bluebird'); var fs = Promise.promisifyAll(require("fs")); if (conditionA) { fs.writeFileAsync(file, jsonData).then(function() { return functionA(); }); } else { functionA(); } 这两个条件都调用functionA 。 有没有办法避免其他条件? 我可以做fs.writeFileSync但我正在寻找一个非阻塞的解决scheme。

如何使用Bluebird对节点的child_process.exec和child_process.execFile函数进行promisify?

我在Node.js下使用蓝鸟承诺库,这太棒了! 但是我有一个问题: 如果查看Node的child_process.exec和child_process.execFile的文档,可以看到这两个函数都返回一个ChildProcess对象。 那么推荐这种function的推荐方式是什么? 请注意,以下作品(我得到一个Promise对象): var Promise = require('bluebird'); var execAsync = Promise.promisify(require('child_process').exec); var execFileAsync = Promise.promisify(require('child_process').execFile); 但是,如何获得原始的Node.js函数的原始返回值呢? (在这些情况下,我需要能够访问最初返回的ChildProcess对象。) 任何build议,将不胜感激! 编辑: 这是一个使用child_process.exec函数的返回值的示例代码: var exec = require('child_process').exec; var child = exec('node ./commands/server.js'); child.stdout.on('data', function(data) { console.log('stdout: ' + data); }); child.stderr.on('data', function(data) { console.log('stderr: ' + data); }); child.on('close', function(code) { console.log('closing code: ' + code); […]

我如何使用蓝鸟与Angular?

我尝试使用蓝鸟的承诺: HTML: <body ng-app="HelloApp"> <div ng-controller="HomeController">{{name}} {{also}}</div> </body> JS: // javascript var app = angular.module('HelloApp', []); app.controller("HomeController", function ($scope) { var p = Promise.delay(1000).then(function () { $scope.name = "Bluebird!"; console.log("Here!", $scope.name); }).then(function () { $scope.also = "Promises"; }); $scope.name = "$q"; $scope.also = "promises"; }); window.app = app; [ 小提琴 ] 然而,无论我尝试了什么,它仍然保持"$q promises" ,并没有更新。 除了我添加了一个手动的$scope.$apply […]

将承诺转换为蓝鸟

我发现了一个使用承诺的现有库,但是它不使用蓝鸟。 库函数并不具备蓝鸟所喜欢的.map()或.tap()所有额外function。 蓝鸟如何将“正常的”或“非蓝鸟”的承诺转换成蓝鸟提供的所有额外function? 我尝试包装Promise.promisify和Promise.resolve的现有承诺, Promise.promisify都没有成功。

蓝鸟,承诺,然后()

我一直只使用蓝鸟几天,但我想要去所有我的旧代码,并promisify它:) 我的问题是我还没有完全掌握then()命令的stream程。 考虑这两个块: 一个 methodThatReturnsAPromise().then(task2).then(task3); 乙 var promise = methodThatReturnsAPromise(); promise.then(task2) promise.then(task3); 在场景中, task3会得到task2的结果吗? 在B他们都得到了第一个承诺的结果? 第二个与蓝鸟运行Promise.all有什么不同? 这些A / B / Promise.all方法在使用catch方法时有什么不同(我把它放在哪里)。 对不起,这是一大堆问题。

Koa / Co / Bluebird或Q / Generators / Promises / Thunk相互影响? (Node.js)

我正在研究与Koa部分构build一个Web应用程序,但是我并没有完全理解Hors,Whens,以及在哪些方面可以select – 应用 – 支持“使asynchronous更简单”的技术/方法下面列出)。 总的来说,networking上关于这个问题的不同指导仍然让事情变得模糊,特别是在不断发展的最佳实践方面,或者至less是更好的方面,以及在什么情况下。 networking上似乎没有什么东西可以把它全部放在上下文中。 我希望对这个庞大的屁股蔓延的post的反应可以纠正这一点 。 也许下面的问题可以激发人写一个彻底的博客文章或类似的东西来解决这个问题。 我的感觉是,我甚至不接近唯一会从中受益的人。 因此,如果明智的社群能帮助解答以下关于下列技术的问题(以粗体显示)并提供清晰的话,我会很高兴: – a)他们如何以及在何种情况下(如适用)互相补充,补充,替代和/或重叠解决scheme? – b)它们在速度性能,error handling简易性和debugging方便性方面有什么权衡? – c)什么时候,何地以及为什么使用“这个”与“那个”技术,技术组合,和/或方法更好? – d)哪些技术或方法(如果有的话)可能是“明星”。 (希望能够很好地解释作为答案一部分的意见。) ============================== 技术: * Koa * 我的理解: Koa是构buildNode应用程序的基础,它利用了ECMAScript-6特性,其中一个特性是生成器。 * Co * 我的理解: – Co是一个运行ECMAScript-6生成器的实用程序库(它本来就是Node .011和谐的),其目标是允许编写样板代码来运行和pipe理生成器。 Co本质上是Koa(?)的一部分。 具体问题: – 如果和如何在Koa中使用Co,而不是在非Koa中使用Co。 换句话说,Koa整个门面Co? – 如果有更好的发电机库,Co可以replace成Koa发电机库吗? 有没有? *承诺“Q”和蓝鸟等图书馆* 我的理解: – 如果并且直到Node本身运行这个规范,它们在某种意义上就是用于实现Promises / A +规范的“polyfills”。 – 他们还有一些非规范的便利工具来促进使用许诺,比如Bluebird的promisfyAll工具。 具体问题: – […]

用Node.js中的promise来replacecallback

我有一个简单的节点模块连接到一个数据库,并有几个function来接收数据,例如这个function: dbConnection.js: import mysql from 'mysql'; const connection = mysql.createConnection({ host: 'localhost', user: 'user', password: 'password', database: 'db' }); export default { getUsers(callback) { connection.connect(() => { connection.query('SELECT * FROM Users', (err, result) => { if (!err){ callback(result); } }); }); } }; 该模块将从另一个节点模块中被调用: app.js: import dbCon from './dbConnection.js'; dbCon.getUsers(console.log); 我想用promise来代替callback来返回数据。 到目前为止,我已经阅读了以下线程中的嵌套承诺: 使用嵌套承诺编写干净的代码 ,但找不到任何足够简单的解决scheme。 使用承诺返回result的正确方法是什么?

处理承诺链中的多个捕获

我仍然是相当新的承诺,目前正在使用蓝鸟,但我有一个情况,我不太清楚如何最好地处理它。 因此,例如我有一个快速应用程序中的承诺链如下所示: repository.Query(getAccountByIdQuery) .catch(function(error){ res.status(404).send({ error: "No account found with this Id" }); }) .then(convertDocumentToModel) .then(verifyOldPassword) .catch(function(error) { res.status(406).send({ OldPassword: error }); }) .then(changePassword) .then(function(){ res.status(200).send(); }) .catch(function(error){ console.log(error); res.status(500).send({ error: "Unable to change password" }); }); 所以我后面的行为是: 去Id获得帐户 如果在这一点上被拒绝,就会炸毁并返回一个错误 如果没有错误,则将返回的文档转换为模型 validation数据库文档的密码 如果密码不匹配,然后炸出来,并返回一个不同的错误 如果没有错误更改密码 然后返回成功 如果还有其他问题,请退回500 所以目前的捕获似乎并没有停止链接,这是有道理的,所以我想知道是否有一种方法让我以某种方式迫使链条停止在基于错误的某个点上,或者如果有更好的方法构造这个以获得某种forms的分支行为,因为存在if X do Y else Z 。 任何帮助将是伟大的。