Articles of bluebird

函数适用于Promises

我正在使用蓝鸟在Node.js中开发一个基于承诺的项目,而另一个项目则是由ES6提供的本地承诺。 在这两个中,我有一个链,我在以下forms查询数据库: some_function(/*…*/) .then(function () { return query("SELECT `whatever` FROM `wherever` ") }) .then(/*…*/) 请注意, query显然返回parsing为查询结果的承诺。 这在几个链中重复,我正在寻找一种方法来清理未使用的函数包装。 我自然使用Function.prototype.apply() ,但在这种情况下,当我尝试: .then(query.apply(this, ["SELECT * FROM … "])) .then(function(rows){ /*…*/ }) 链中的下一个函数将rows undefined为undefined 。 谢谢你。 你的帮助表示赞赏。

包含在可返回的生成器中的nodejs child_process.spawnSync或child_process.spawn返回输出

因为有一段时间我正在努力达到目前为止还没有解决的问题。 使用nodejs,我喜欢在命令退出后运行交互式sh命令并使用sh命令输出。 我喜欢编写一个可收缩的generator函数来封装交互式shell命令的运行并返回shell命令的输出。 方法1:shelljs shelljs 我用shelljs取得了一些成功,但是在某些时候它不会跑得更远。 问题1:是否有可能获得shelljs到我可以inheritancestdio并使shelljs函数可屈服的点? 方法2:child_process.spawnSync child_process.spawnSync 最后我发现了child_process.spawnSync并很高兴,至less我可以运行交互式sh命令而不会出现任何问题options: { stdio: 'inherit' } 但我还没有find如何取回child_process.spawnSync的输出。 问题2:如何将spawnSync封装到返回child_process输出的生成器函数中? 方法3:共同子女过程 我也试过共同子女的过程 。 它似乎运行,但不与stdio互动。 有这个问题 ,我真的不明白。 问题3:有人可以解释我/发表一个例子如何共同subprocess将与stdioinheritance工作。 方法4:用蓝鸟promisify child_process.spawn() 我打开蓝鸟的问题 ,如果child_process.spawn()是promisifiable 所以我的问题。 有人可以给我一个例子,说明如何运行一个交互式shell命令,该命令可以封装在一个返回shell命令输出的可生成生成器函数中? 我很乐意接受新的方法。 我创build了一个在github上可用的npm模块,你可以将它分叉并贡献。 thx提前。

从asynchronous获取蓝鸟承诺等待function

我正在寻找一种方法,使用Node v7.6或更高版本,在调用asynchronous函数时获取Bluebird Promise(或任何非本地promise)。 我可以这样做: global.Promise = require('Bluebird'); // Or Q/When var getResolvedPromise = () => Promise.resolve('value'); getResolvedPromise .tap(…) // Bluebird method .then(…); 请参阅: 我可以使用global.Promise = require(“bluebird”) 我希望能够做到这样的事情: global.Promise = require('Bluebird'); // Or Q/When var getResolvedAsyncAwaitPromise = async () => 'value'; getResolvedAsyncAwaitPromise() .tap(…) // Error ! Native Promises does not have `.tap(…)` .then(…); 我知道我可以随时使用这样的东西: Bluebird.resolve(getResolvedAsyncAwaitPromise()) .tap(…); […]

与Bluebird手动promisifying pg.connect

我想promisify node-postgres'pg.connect方法以及callback中提供的内部connection.query方法。 我可以将后者进行修改,但是我需要手动执行第一个(如果我在这里丢失了某些东西,请解释一下)。 事情是,我不确定这段代码是否正确或应该改进? 代码工作,我只是想知道,如果我使用蓝鸟的意思。 // aliases var asPromise = Promise.promisify; // save reference to original method var connect = pg.connect.bind(pg); // promisify method pg.connect = function (data) { var deferred = Promise.defer(); connect(data, function promisify(err, connection, release) { if (err) return deferred.reject(err); // promisify query factory connection.query = asPromise(connection.query, connection); // resolve promised connection […]

ES7asynchronous/等待概念问题

我正在迁移一个现有的程序来使用async / await (通过Babel的bluebirdCoroutines )来学习这种风格。 我一直在看这个教程 。 我有点困扰以下的行为。 这段代码按预期工作: let parts = []; let urlsP = urls.map((url, index) => { return dlPart(url, index, tempDir); }); for (let urlP of urlsP) { // Parallel (yay!) parts.push(await urlP); } for (let part of parts) { // Sequential await appendFile(leFile, part); } 重写如下,它仍然有效,但拳头操作不再平行(完成需要更长的时间)! let index = 0; let […]

当使用Sinon的假定时器时,蓝鸟承诺冻结

与Sinon的假定时器和Bluebird一起使用时,以下testing会冻结。 var sinon = require('sinon'); var Promise = require('bluebird'); describe('failing test', function() { beforeEach(function() { this.clock = sinon.useFakeTimers(); }); afterEach(function() { this.clock.restore(); }); it('test', function(done) { Promise.delay(1000).then(function(){ done(); //This never gets called }); }); }); 我正在用Bluebird(v2.9.33)和Sinon(v1.15.3)使用Mocha(v2.2.5)。 我尝试了Bluebird和Sinon在一些讨论中提出的build议,但是我无法做到这一点。 这似乎是一个问题与方式Sinon存根setImmediate但除此之外,我不知道如何解决这个问题。

使用节点请求下载图像,并使用fs Promisified,在Node.js中没有pipe道

我一直在努力成功地下载一个图像,而不用pipe道到fs。 这是我所完成的: var Promise = require('bluebird'), fs = Promise.promisifyAll(require('fs')), requestAsync = Promise.promisify(require('request')); function downloadImage(uri, filename){ return requestAsync(uri) .spread(function (response, body) { if (response.statusCode != 200) return Promise.resolve(); return fs.writeFileAsync(filename, body); }) .then(function () { … }) // … } 有效的input可能是: downloadImage('http://goo.gl/5FiLfb', 'c:\\thanks.jpg'); 我相信问题在于body的处理。 我曾尝试将其转换为Buffer ( new Buffer(body, 'binary')等),但都失败了。 感谢前方的任何帮助!

蓝鸟Promisfy.each,for循环和if语句?

现在,父对象循环( m < repliesIDsArray.length )在第一个findOne触发之前完成,所以这全部只循环通过respondIDsArray.asynchronous的最后一个元素。 这个代码集的promisified版本的正确语法是什么? 对promisification新来说,想知道如何启动这个promisify +循环通过数组+帐户的if语句.. 蓝鸟是必需的,而Promise.promisifyAll(require("mongoose")); 叫做。 for(var m=0; m<repliesIDsArray.length; m++){ objectID = repliesIDsArray[m]; Models.Message.findOne({ "_id": req.params.message_id}, function (err, doc) { if (doc) { // loop over doc.replies to find the index(index1) of objectID at replies[index]._id var index1; for(var i=0; i<doc.replies.length; i++){ if (doc.replies[i]._id == objectID) { index1 = i; break; } […]