Articles of 承诺

node.js + request => node.js + bluebird +请求

我试图了解如何用promise来编写代码。 检查我的代码PLZ。 这是对的? Node.js +请求: request(url, function (error, response, body) { if (!error && response.statusCode == 200) { var jsonpData = body; var json; try { json = JSON.parse(jsonpData); } catch (e) { var startPos = jsonpData.indexOf('({'); var endPos = jsonpData.indexOf('})'); var jsonString = jsonpData.substring(startPos+1, endPos+1); json = JSON.parse(jsonString); } callback(null, json); } else { […]

nodejs – 如何promisify http.request? 拒绝被叫了两次

我试图把http.request包装到Promise : new Promise(function(resolve, reject) { var req = http.request({ host: '127.0.0.1', port: 4000, method: 'GET', path: '/api/v1/service' }, function(res) { if (res.statusCode < 200 || res.statusCode >= 300) { // First reject reject(new Error('statusCode=' + res.statusCode)); return; } var body = []; res.on('data', function(chunk) { body.push(chunk); }); res.on('end', function() { try { body = […]

得到第一个履行的承诺

如果我有两个承诺A和B,其中只有一个承诺会成功,我怎样才能获得成功的承诺? 我正在寻找类似于Promise.race东西,但是它只会返回满足的第一个承诺。 我正在使用ES6的承诺。

如何从嵌套的诺言中返回值?

我在Redis中有一组电影ID: [1,2,3,4]和一组具有实际数据的哈希值。 现在,我想一次获取所有ID的电影数据。 我正在尝试使用蓝鸟promisses,但我卡住了。 到目前为止,我有: 函数allMovies(){ var电影,movieIds; 返回client.smembersAsync('movies.ids')。then(function(ids){ movieIds = ids; movies = _.map(movieIds,function(id){ var电影; return client.hmgetAsync(“movies:”+ id,'title','description','director','year')。done(function(data){ 电影=数据; 返回{ 标题:data [0], 描述:data [1], 导演:资料[2], 年份:数据[3] }; }); 返回电影; }); }) 问题出在我所尝试的方面,我总是得到一个新的承诺,而所有的操作完成后,我只是对JSON感兴趣。 这里的任何人都可以解释一下这个问题?

使用node.js,stream和承诺下载文件

这是我的代码片段: var processListing = function (directoryItems) { console.log('foreach'); var itemsToDownload = []; directoryItems.forEach(function (element, index, array) { //Ignore directories if (element.type === 'd') { console.log('directory ' + element.name); return; } //Ignore non zips if (path.extname(element.name) !== '.zip') { console.log('ignoring ' + element.name); return; } //Download zip itemsToDownload.push({ source: element.name, destination: element.name }); //aftpSystem.downloadFile(element.name, element.name); }); […]

在使用Promise时挂在variables上的最佳做法

我对诺言是新的,我想知道什么最好的做法是保持variables,而下链? 通过Promise连接到MongoDB非常简单: connectToMongoDB(data).done(function(db) { var collection = db.collection('test_inserts'); // do more stuff here }); 但是如果我必须连接到两个不同的数据库会发生什么? connectToMongoDB1(data1).then(function(db1) { return connectToMongoDB2(data2); }).done(function(db2) { var collection = db1.collection('test_inserts'); // ERROR: db1 is undefined }); 那个错误非常有意义。 但是,如何转发db1而不改变我的connectToMongoDB2()函数,因为我想保持connectToMongoDB2()和所有我的承诺一般非常通用? 我的意思是,我可以围绕一个对象存储所有相关的东西,但是这看起来有点怪异: var relevantStuff = {}; connectToMongoDB1(data1).then(function(db1) { relevantStuff.db1 = db1; return connectToMongoDB2(data2); }).done(function(db2) { var collection = relevantStuff.db1.collection('test_inserts'); // do more stuff […]

断言在摩卡testing中打破asynchronousfunction

我正在构build一个节点模块,并试图尽我所能对它进行unit testing。 我已经设置了摩卡和柴做testing处理。 我有一个问题,testing我的asynchronous方法(返回承诺的方法)。 在下面的testing中,我正在testing一个“升级”对象的方法。 it('Should return a list of versions for the default git repo', function (done) { fs.writeFileSync(appSetup.CONFIG_FILENAME, JSON.stringify(appSetup.DEFAULT_CONFIG)); var upgrade = new Upgrade({ quiet: true }); upgrade.getVersions().then(function (versions) { assert(versions && versions.length > 0, 'Should have at least one version.'); assert.equal(1, 2); // this throws the exception which causes the test case […]

如何避免在JavaScript应用程序中丢失“this”上下文?

这是我的代码示例: function QueueService() { var key = Config.get("AWS.accessKeyID"); var secret = Config.get("AWS.secretKey"); var credentials = new AWS.Credentials(key, secret, sessionToken = null); this._sqs = new Promise.promisifyAll(new AWS.SQS({apiVersion: '2012-11-05', region: "us-west-2", endpoint: "sqs.us-west-2.amazonaws.com", credentials: credentials})); } QueueService.prototype.FillBirdQueue = function(birds) { var self = this; birds.forEach(function(bird_batch) { var params = { Entries: bird_batch, QueueUrl: Config.get("AWS-Queue.Birds") }; return self._sqs.sendMessageBatchAsync(params); […]

从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(…); […]

包裹在承诺的JavaScript通用函数

如何将可以同步/同步function的函数封装在promise中? 我已经打电话给如下function action[fn](req, res); 在函数fn(在下面的例子中)可以在里面(我使用dynamic调用每个函数)同步或者像下面那样的同步, 它如何推荐包装在承诺。 如何处理错误,如果有… 我使用nodeJS应用程序 run: function (req, res, filePath) { var writeStream = fs.createWriteStream(fileRelPath, {flags: 'w'}); req.pipe(writeStream); req.on("end", function () { console.log("Finish to update data file") }); res.end("File " + filePath + " saved successfully"); }