Tag: 承诺

如何使用node.lift-ed函数when.map?

我正在学习使用when.js库的承诺,并使用带有节点fs.readFile让我觉得我错过了一些东西。 当作为一个单独的promise被调用时, foo promise可以正常工作,但是在when.map作为映射器函数使用时会失败,因为index被注入为第三个参数(然后callback被传递为第四个参数)。 API doc说when.map对mapper函数有两个参数要求。 然后,mapper函数可以写成bar ,它可以在任何情况下工作。 var when = require('when'); var node = require('when/node'); var _ = require('lodash'); // readFile has the same signature as fs.loadFile function readFile(param1, param2, callback) { console.log(Array.prototype.slice.call(arguments)); callback(null, [param1, param2]); } var foo = _.partialRight(node.lift(readFile), 'base64'); var bar = function (fileName, index) { return node.lift(readFile)(fileName, 'base64'); }; when.map(['1', […]

在Meteor中pipe理asynchronouscallback

我正在使用Meteor 1. *和Iron Router 1. *。 我使用的是Meteor方法之外的Meteor服务器端的Node.js调用 – 特别是在服务器端的Iron Router路由中。 到目前为止,路由中的一部分代码看起来类似于以下内容: fs.mkdir(filebox, function (e) { if(!e || e.code === 'EEXIST') { fs.writeFile(file1, function (err) { if (err) throw err; fs.writeFile(file2, function (err) { if (err) throw err; fs.writeFile(file.3, function (err) { if (err) throw err; ExternalLibrary.do_something_(file1, function (err, buffer) { if (err) throw err; ExternalLibrary.do_something_(file2, […]

如何连接,创build数据库,重新连接数据库,并在knex.js中创build表?

我正在使用knex.js. 我有一个奇怪的设置继续下去。 我不能确定我连接到的MySQL数据库已经build立了我的数据库。 所以,首先我没有指定数据库连接。 然后,我创build一个数据库,并重新连接到指定的数据库。 之后,我想创build三个不同的表格。 但是我不断收到Error: ER_BAD_DB_ERROR: Unknown database '<dbname>' 。 我有这个代码, knex.raw('CREATE DATABASE IF NOT EXISTS ' + database + ';' ).then(function() { knex.destroy(); knexConnect.connection.database = database; knex = require('knex')(knexConnect); }).then(function() { knex.schema.createTable('items', initializeItems ).catch(function (err) { console.log(err); }); knex.schema.createTable('lessons', initializeLessons ).catch(function (err) { console.log(err); }); knex.schema.createTable('reviews', initializeReview ).catch(function (err) { console.log(err); }); […]

Orchestrate.js触发'promise.fail'和'promise.then'

Orchestrate有一个NodeJS的客户端。 它基于承诺,所以我应该定义一个函数,然后一个函数失败。 第一个应该在请求成功时触发,第二个在失败时触发。 但是有时候会触发两者,我不明白为什么。 下面是一个函数的例子,它既调用又调用失败: user.checkToken = function (token, db, callback) { if (token) { db.get('acces_tokens', token).then(function (res) { if (new Date(res.body.expire) > new Date()) { //Token is valid callback(res.body.user, res.body.expire); } else { //Token has expired callback(false, "Token has expired"); } }).fail(function (err) { callback(false, "ERROR"); }); } else { callback(false, "A token is […]

在timout上从node.js获取栈回溯?

我正在使用node.js与域和cluster捕捉意外的exception(程序员错误),然后重新正常启动。 然而,我们偶尔.catch().finally()程序员不能添加最后的.catch().finally()来确保他们的代码实际返回。 我可以很容易地添加一个超时,在预先指定的时间之后抛出一个exception,以确保这些不好的请求不会永远活着。 但是我想要做的是让超时信息从域中解脱出来,以解释请求中发生了什么,这样我们就可以得到一个日志/通知/无论从哪个开始, 。 有没有合理的方法来做到这一点? 如果是这样的话,我们使用express作为框架, express-domain-middleware来获取域/重启逻辑,并承诺asynchronous逻辑。

Node.js承诺和asynchronousexception

我主要使用Promises来封装asynchronous代码,使用“promise”(但也试过“bluebird”)npm模块。 我不惊讶,它不处理asynchronous抛出: var Promise = require("promise"); // also tried require("bluebird") here function asyncThrow() { return new Promise(function(resolve, reject) { process.nextTick(function() { throw new Error("Not handled!"); }) }); } asyncThrow() .then(function() { console.log("resolved"); }) .catch(function() { console.log("rejected"); }); 在这个代码执行过程中,node.js存在unhandedexception(我期望这种行为)。 另外我已经尝试过基于“域”的error handling: var Promise = require("promise"); // also tried require("bluebird") here var domain = require("domain"); function asyncThrow() […]

mongoose的承诺和蓝鸟

节点是否会有Promise的内置实现,或者我们应该采用其中一个主要的库? 如Q / Blueblird? 我有一个使用async.waterfall的代码,我想将其移动到使用承诺。 链接的函数之一是mongoosefindOne从mongoose4.0返回一个承诺,但我明白,混合承诺types是不好的做法,因为mongoose使用它自己的承诺的实现,我想用Q /蓝鸟。 我应该使用promsifyAllmongoose? 或将promisify将被弃用一旦承诺将在节点实施目前的代码是: async.waterfall([ function(done){ User.findOne({ email: reco.mail }, done); }, function(receiverUser, done){ if (!receiverUser){ } else { } // send the model to mongoose to get verified and persisted reco.save(function (err) { if (err) { //handle error } return done(err); }); } ], function(err){ if (err) { console.error('unexpected […]

无法处理hystrix模块中的request-promise-json错误

我是节点js的新手,我必须在节点js中为我的项目实现hystrix弹性库,但我坚持一点。 我面临的问题是,每当我从我的服务器应用程序发送错误代码(4xx,5xx),我不能使用诺言来处理它们。 我粘贴我的app.js和server.js文件的代码。尽pipe该项目有其他几个文件,但这些文件是用于启动所有的进程,但唯一的问题是在app.js。 请帮助我如何有效地处理被拒绝的承诺错误,以便我没有得到未定义的res,身体在app.js的 isErrorHandler方法。 我还将添加控制台数据。 app.js var express = require('express'), Promise = require('q'), request = require('request'), getRandomInt = require('./random_int'), http = require('request-promise-json'), _ = require("lodash"), hystrixStream = require('../../lib/http/HystrixSSEStream'), CommandsFactory = require("../../lib/command/CommandFactory"); var makeRequest = function(options) { var req = _.assign(options); return http.request(req); }; function hystrixStreamResponse(request, response) { response.append('Content-Type', 'text/event-stream;charset=UTF-8'); response.append('Cache-Control', 'no-cache, no-store, max-age=0, must-revalidate'); […]

一个for循环内的承诺没有按预期工作

我有一个简单的代码包装创build方法与承诺为: function create(api, record) { return new Promise(function (resolve, reject) { api.create(record, function (err, result) { if (err) reject(err); else resolve(result); }); }); } 我想用来插入logging到我的数据库中: for (var i = 0; i < dummyData.products.length; i++) { create(productsAPIService, dummyData.products[i]) .then(function(product) { logInsert("product", false, product._id); }) .catch(function(err) { logInsert("product", err, product._id); }); } 对于我不清楚的原因,这个东西好像只插入第一条logging。 难道我做错了什么?

发电机,承诺和合作或然后收益

我正在写一个nodejs程序,并需要在初始化时间获得一些configuration数据,所以我可以实例化一个单身人士。 configuration数据回来作为承诺,这意味着我必须dynamic初始化的东西,而不是在需要的时候,所以我可以module.exports = () => return new blah(config) 。 我不想要一个工厂返回一个可靠的 – 我想要它返回一个构造函数的新实例。 我有一个内部库,获取configuration数据并返回一个承诺。 我试图使用co或then-yield或类似的库,以便我可以把事情看作是同步的(我认为这是这些库的用途,但也许我的理解是有缺陷的),大多数情况下我可以做一个返回一个实例的工厂,并不返回一个可以用实例parsing的promise 简化代码: configuration读者: var read = function () { let c = projectConfig.load(); //returns a promise that resolves with config data return c; }); module.exports = {read}; 厂: let factory = ty.async(function * factory () { let cfg = yield configHelper.read(); console.log('config', […]