Articles of 承诺

nodejs mssql并承诺混淆

我是非常新的承诺在JavaScript中,所以这个问题是帮助我弄清楚为什么我得到一个错误(以奇怪的顺序)使用承诺。 最重要的是,我正在忙于使用ms-sql回购,sinonjs和第一次restify,所以也没有帮助 这个问题和我之前问过的有关 在上面的问题中,我需要在@robertklep的帮助下完成我成功完成的SQL DB。 然而,作为一个完整的检查,我想检查终点是否仍然像以前那样返回我期望的数据,所以我解开了残局。 现在我收到以下错误,我不知道为什么: [错误:发送后无法设置标题。] testing: 'use strict'; var expect = require('chai').expect, request = require('supertest'), chance = require('chance').Chance(), server = require('../server'), sinon = require('sinon'), select = require('../../helpers/data_access/select'), read_file = require('../../helpers/read_file'); describe("/account_types", function () { // before(function (done) { // sinon // .stub(select, "query_list") // .returns([{id: "test"}]); // // sinon // .stub(select, "query_single") […]

(…)。然后在节点(expressJS)中不是函数

我正在使用promises的hope.js库。 问题是有时它返回以下错误: (…).then is not a function 。 我不知道为什么,我不得不做很多修补。 工作的方法的代码看起来像那些没有,唯一的区别是在这种情况下,我正在使用其他库: async.js 。 我的代码如下: 控制器: userstoryservice.deleteTaskByIdRemovedUS(userstoryexists).then(function (error, arraysresult) { if (error) response.status(error.code).json({message: error.message}); else response.status(200).json({message: 'deleted successfully}); }); 我的服务: exports.deleteTaskByIdRemovedUS = function deleteTaskByIdRemovedUS(userstoryexists){ var promise = new Hope.Promise(); var Task = mongoose.model('Task'); var obj = {}; obj.arrTasksIdsRemoved = []; obj.arrTasksIdsRemovedErrors = [];` async.each(userstoryexists.tasks, function (item, callback){ […]

使用Bluebird将所有csv文件读入节点j中的1个JSON对象数组

我在nodeJS中使用Promise Bluebird。 我想将特定目录中的所有CSV文件读入1个JSON对象数组并显示结果。 步骤是: 读取目录以获取文件名(调用readDir函数) 使用循环来读取每个CSV文件(lodash forOwn循环),并将内容存储在JSON对象数组(调用函数ReadFile) 将JSON对象数组(使用Lodash分配函数)与主JSON对象数组(名为data_Warehouse)合并,以便将所有数据存储到1个JSON对象数组中。 完成将所有CSV文件数据保存到JSON对象数组data_Warehouse后,在console.log中显示data_Warehouse(.then部分)。 检查是否都按照计划,我把代码之间的console.log。 问题是这个过程不是按照正确的顺序完成的。 我试图使用蓝鸟,但它仍然没有按照计划去。 你能帮我解决这个问题吗? 这是我的输出: 输出:负载\ Book1.csv 输出:负载\ Book2.csv 输出:负载\ Book3.csv 结果:{} 加载\ Book1.csv 101 load \ Book2.csv 102 加载\ Books.csv 103 正如你所看到的,行输出“results”应该是最后一个,但是在JSON对象数组data_Warehouse为空的过程中是较早的。 var Converter = require("csvtojson").Converter; var converter = new Converter({}); var _ = require('lodash'); var r = require('rethinkdbdash')(config.rethinkdb); var fs = Promise.promisifyAll(require('fs')); readDir() .then(function(v){ […]

节点/蓝鸟/ MySQL交易

在过去的一周里,我一直在为蓝鸟承诺库和MySQL而苦苦挣扎。 我经常发现,假设我完全沉浸在他们的术语中,并且往往只给出一半的答案,或者根本没有答案。 让我挂着试图找出如何使用它。 目前我正试图执行一系列的SQL命令来创build一个事务内的数据库logging。 我正在使用这个代码: var Promise = require('bluebird'); var mysql = require('mysql'); Promise.promisifyAll(mysql); Promise.promisifyAll(require('mysql/lib/Connection').prototype); Promise.promisifyAll(require('mysql/lib/Pool').prototype); function getConnection() { return pool.getConnectionAsync().disposer(function (connection) { connection.release(); }); } function getTransaction(connection) { return connection.beginTransactionAsync().disposer(function (tx, promise) { if (promise.isFulfilled()) { tx.commitAsync(); } else { tx.rollbackAsync(); } }); } Database.prototype.addStory = function (projectId, title, text) { return Promise.using(getConnection(), function […]

unit testing承诺不工作

即时通讯使用摩卡来testing我的API,问题是这个函数是asynchronous和testing套件之前,我从function获得resutls,我怎么能克服这个? 我尝试链接像下面的testing提出了一个错误空的testing套件。 describe("Validations", function () { var validator = require('../utils/validator'); var isValid = null; validator.validateJS() .then(function (args) { isValid = args; }).then(function(){ it("init validations ", function () { expect(isValid).to.equal('valid1'); }); }); }) 我最初的用法就像下面这个,如果是对它的调用,期望里面的答案(isValid)是来自诺言,任何想法? describe("Validations", function () { var validator = require('../utils/validator'); var isValid = null; validator.validateJS() .then(function (args) { isValid = args; }).done(); it("init validations […]

返回一个用嵌套promise构build的对象

我正在努力围绕一个嵌套的承诺布局,其中一个对象返回结束。 我目前的代码如下: 路由器 router.get(`/${config.version}/event/:id?`, function (req, res, next) { var event = new Event(req, res, next); event.getInfo(req.params.id).then((info) => { res.send(info); }); }); function getInfo(id) { db.main('events').where('id', id).select() .then((result) => { if(result.length > 0) { var event = result[0]; //regular functions event.status = this.getStatus(id); event.content = this.getContent(id); event.price = this.getPrice(id); //promise functions var users = this.getUsers(id); […]

ES6 – 并行地为多个用户帐户提出多个请求

我正在构build一个express.js Web应用程序,并且我需要为多个用户帐户并行请求多个请求,并返回一个对象。 我尝试使用generators和Promise.all但我有2个问题: 我不会并行运行所有用户帐户。 我的代码在响应已经返回后结束。 这是我写的代码: function getAccountsDetails(req, res) { let accounts = [ '1234567890', '7856239487']; let response = { accounts: [] }; _.forEach(accounts, Promise.coroutine(function *(accountId) { let [ firstResponse, secondResponse, thirdResponse ] = yield Promise.all([ firstRequest(accountId), secondRequest(accountId), thirdRequest(accountId) ]); let userObject = Object.assign( {}, firstResponse, secondResponse, thirdResponse ); response.accounts.push(userObject); })); res.json(response); }

Node.js Express,error handling仅适用于console.error

我正在使用Node.js Express来创build一些HTTP REST API。 我有方法调用一个下划线服务 ,返回一个Promise如下: function getAllApps(request, response) { appService.getAllApps(request.query.$expand).then(function (apps) { response.status(200).send(apps); }) } 我把这个方法映射如下: var api = express.app; api.get('/apps', getAllApps); 现在,我已经介绍了error handling如下: function getAllApps(request, response) { appService.getApps(request.query.$expand).then(function (apps) { response.status(200).send(apps); }) .catch(function (err) { console.error('Error occurred in Apps Api: ' + err); response.status(400).send(err); }); } 哪一个按预期工作,除了当遇到一个错误,我得到在控制台的完整的错误堆栈如下: Express is listening on 127.0.0.1:3000 Web […]

在条件逻辑的基础上调用Q承诺

以下是我的情况 if abc is true call async func1, func2 else call async func1 function test(): Q.Promise<boolean> { if(abc) Q.all([func1,func2]) else Q.all([func1]) //if failed throw reject reason all the way in the chain } 如图所示,它可以使用if和else子句完成,有没有更好的方法来有条件地调用promise? 如何抛出error from any one of the promises ?

用Promises处理Mongoose错误

我在我的Nodejs,REST API中使用mongoose与本地ES6承诺进行数据库pipe理。 我无法finderror handling的最佳做法。 我有一段代码看起来像这样: Cities.findOne({'id': someid}).then((city) => { if (!city) throw 'No city found'; //modify city.embedded.dynamic.field return city.save(); }).then((city) => { if (!city) throw 'City not saved'; res.send(city); }).catch((err) => { console.log(err); }); 是否需要检查city.save()的返回值是否未定义? 或者将在保存中的错误被捕获? 在文档中不清楚save()是否可以像mongoose查询有时那样返回undefined 。 任何帮助,将不胜感激。 编辑 :我使用findOne和手动修改时间表,因为mongoose不能模型dynamic以及embedded架构。