Tag: 蓝鸟

承诺防止节点进程退出

我写了一个使用Bluebird promise来迁移数据的工具,以便用户可以通过node命令直接触发这个工具。 例: 节点migrate.js 问题是,这个节点进程完成后不会存在。 这里是主migrate.js的内容,exec()函数返回一个promise。 var migrate = require('../elasticsearch/migrate'); var setting = require('../../config/setting'); var cmd = new migrate(setting.NewConfig.search, true); cmd.exec() .then(function () { console.info('Operation completed'); }) .catch(function (err) { console.error(err); }); 目前,我强制退出通过调用process.exit(0); migrate.js的内容,我无法公开的一些代码,所以我将它们删除 'use strict'; var Promise = require('bluebird'); var request = Promise.promisifyAll(require('request')); var _ = require('lodash'); var index = require('./mapping.json'); var Schema = […]

在承诺链中有if-else条件

我有一个承诺链,并在一些点我有if-else条件如下: .then(function() { if(isTrue) { // do something returning a promise } else { // do nothing – just return return; } }) .then(function() { … }) 老实说,我不喜欢这种模式。 我感觉错了。 我的意思是使用一个简单的回报没有任何东西 你有什么想法让这个代码看起来不一样吗?

使用节点(ES6)和蓝鸟保证混淆

在asynchronous调用完成之前,我有一个值被分配的问题,所以我select使用Promises(在这个例子中是Bluebird)。 我认为可以解决这个问题,但是由于我并不十分熟悉承诺/节点,所以它仍然在做同样的事情。 我将如何去修改我的代码,以正确使用承诺? 并保持一个stream程,所以我可以validation基于前row modules ? var Promise = require('bluebird'); var db = require('../shared/db'); var queryHelper = require('../shared/queryHelper'); var schemas = require('../schemas/schemas'); var _ = require('lodash'); var serverSettings = require('../shared/coreServerSettings'); // Create new instance of mysql module var connection = new db(); var queryhelper = new queryHelper(); // Promised methods var queryAndWait = Promise.promisify(connection.query); ..snip […]

摩卡testing超时使用承诺和跳过代码,为什么?

我一直试图连续运行这个testing2天,我无法弄清楚它有什么问题: /*eslint-env mocha */ // var expect = require('chai').expect; var chai = require('chai'); var chaiAsPromised = require("chai-as-promised"); var expect = chai.expect; var Promise = require('bluebird'); var Archive = require('../lib/archive'); var path = require('path'); var fs = Promise.promisifyAll(require('fs-extra')); var globAsync = Promise.promisify(require('glob')); var tar = require('tar-fs'); var zlib = Promise.promisifyAll(require('zlib')); chai.use(chaiAsPromised); describe('Archive', function() { var pkg; […]

node.js,bluebird,执行path控制不佳

我正在努力学习蓝鸟; 我不是想控制执行。 (这个bluebird问题来自Node.js,asynchronous模块,并发性的一个async.js问题。) 这里有一些代码,加上我期望得到的和我所得到的。 问题: 为什么#3function在(1)#1和#2function结束之前开始,以及(2)第一个错误检查function? 什么导致了错误? 发生了什么“代码结束”? var Promise = require('bluebird') function part1() { console.log('part1 start') return new Promise(function(resolve, reject) { Promise.all( [ part1a(1), part1a(2) ]) .then( function(err) { if (err) console.log('part1 error after #1 and #2') else console.log('part1 done with #1 and #2') } ) .then(part1a(3)) .then( function(err) { if (err) console.log('part1 error […]

有关承诺的细节; 例子

我努力实现诺言。 (我想我理解他们,但我经常得到意想不到的结果,所以也许我不会。) 请考虑这个代码。 function ap() { return new Promise(function(resolve, reject) { console.log('function ap starting want this'); function ender() { console.log('function ender starting want this'); return resolve('ender'); console.log('after return in ender don\'t want this'); //#1 } ender() console.log('after function ender and its resolve ' + 'for Promise don\'t want this'); //#2 }) // Promise } // […]

蓝鸟承诺每个返回的结果

即时通讯使用蓝鸟来链接nodejs中的几个幽灵相关的任务。 我的问题是,最后在链中得到的parameter passing给每个作为结果,而不是scrapDomain函数的结果 我已经搞了两天了,请帮忙吗? 承诺链: Promise .each(domains, function(domain) { return ensureDir(domain[0]) }) .each(ssHome) .each(function(domain){ return scrapDomain(domain).then(function(results){ return results }) }) .then(function(results){ console.log(results) })

bluebird promisifyAll()然后()不与节点require一起工作

我第一次使用承诺,所以请忍受我。 基本上,我没有看到我的.then()语句被调用的function。 当我调用tt() ,它是否正常工作。 当我调用t.tAsync() ,再次调用t() 。 但是,当我调用t.tAync().then(console.log); 这是我的节点模块: 'use strict'; var t = function(){ console.log('inside t()'); return 'j'; }; module.exports = { t: t }; 这里是我的演示脚本: 'use strict'; require('should'); var Promise = require('bluebird'); var t = require('../src/t'); Promise.promisifyAll(t); /* Call t() once to demonstrate. Call tAsync() and see t() is called Call tAsync.then(fn), and […]

一个没有返回数据的函数的承诺

我试图解开一大堆基于callback的节点代码,它看起来像承诺的关键,因为我有很多的asynchronous数据库操作。 具体来说,我正在使用蓝鸟。 我被困在如何处理一个函数,需要从数据库检索数据,并设置一定的值。 我试图完成的最终目标是这样的: myobj.init().then(function() { return myobj.doStuff1(); }).then(function() { return myobj.doStuff2(); }).catch(function(err) { console.log("Bad things happened!", err); }); 特别是init , doStuff1和doStuff2只有在前一个完成doStuff2需要运行,但是它们都执行(多个)asynchronous操作。 到目前为止,这是我对init的,但我不知道如何完成它: Thing.prototype.init = function(force) { if (!this.isInitialized || force) { return datbase.query("…").then(function(results){ // … use results to configure this }).catch(function(err){ console.log("Err 01"); throw err; }); } else { // ??? // No data […]

蓝鸟答应在快递/mongoose中过早返回

我是新的承诺,并想知道为什么以下不起作用。 我假设,因为我需要设置我的自定义方法与承诺工作的具体方式。 我使用蓝鸟作为我的诺言库。 我试图通过在这些模型(即讨论和用户模型)上使用mongoose静力学和方法来获得给定“用户”用户名的“讨论”对象的列表。 下面如果我的请求处理程序在Express中。 试图获取JSON并将其作为现在的响应发送: /* /routes/users.js */ var Promise = require('bluebird'); var User = require('../models/').User /* … express inclusions, other routes … */ /* Get list of discussions for user */ router.get('/:username/discussions', function(req, res) { User.findOne({username: req.params.username}).then(function(user) { if (user) { return user.getDiscussions(); } else { res.send('no user found'); } }).then(function(discussions) { res.send(discussions); […]