Articles of 承诺

蓝鸟承诺和域名

我有一个在蓝鸟承诺中抛出一个错误的问题。 采取以下代码: var Promise = require('bluebird'); var domain = require('domain'); var problem = function() { return new Promise(function(resolve, reject){ reject(new Error('Oops!')); }); }; domain.create() .on('error', function(e){ console.log("Caught Error " + e.message) process.exit(1); }) .run(function() { problem().done(); }); 我希望看到Caught Error Oops! 在控制台。 但是,似乎错误没有被捕获到域内,我在控制台中看到一个致命的错误和堆栈跟踪。 有谁知道为什么?

为什么我的代码首先打印“下载结束”,然后开始下载html页面?

function downloadAsync(url, name) { return new Promise(function(resolve, reject) { request(url, function(err, response, body) { if (err) { reject(err); } else { fs.writeFileSync(path.resolve(process.cwd(), 'downloaded_html', name), body); console.log('got ' + url); resolve(); } }) }) } var urls = ['url1', 'url2', 'url3'] var promises = urls.map(function(url, i) { var name = i + '.html' downloadAsync(url, name) }) […]

在.settle()(或等价的)中打破一系列的Promise

目前我们正在使用bluebird v2.9.8 ,无法升级到v3兼容(现在,但可能没有解决scheme)。 过去我们已经使用了.settle() ,但是我们遇到了一个users集合映射到promises ,我们需要确认一个特定的字段是否为true 。 如果只有一个false情况,那就没有必要继续了。 如果他们都是true ,那就意味着我们已经执行了所有的promises 。 Promise.settle()将执行所有,等到所有完成。 再一次,我们的目标是一旦我们得到一个false中断。 原来的代码额外的一块是调用额外的Promise以获得更多的信息从数据库。 所以,重写使用Promise.all() : var accessPromises = users.map(function (user) { return new Promise(function(resolve, reject) { if (user.userId == matchingUserId) { return resolve(true); } else if (user.type && user.type == matchingType) { return resolve(true); } else { // See if this user is one […]

在打字稿中,不能使promisifyAll Redis api与Bluebird

我无法使打字稿中的redis api promisifyAll。 import * as redis from 'redis'; import {RedisClient} from 'redis'; import * as Promise from 'bluebird'; Promise.promisifyAll(redis); const client: RedisClient = redis.createClient(CacheConfig); 我收到以下打字错误。

为什么节点等待一个单一的承诺,但不是一个承诺的数组?

考虑这个函数嘲笑查询数据库,并在2秒后通过Promise返回一些logging: function query() { var recs = [1,2,3]; return new Promise(r => setTimeout(() => r(recs), 2000)) } 如果我添加下面的语句: query().then(console.log); 并用节点运行脚本,暂停2秒,打印出logging,并按预期返回。 另一方面,如果我用一组完全相同的承诺来replace那行: Array(5).map(x => query().then(console.log)); 该脚本立即返回,并且什么都不打印。 为什么节点在退出之前等待单个promise返回,但是当有5个未解决的promise时,立即退出?

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 […]