Tag: 蓝鸟

如何从节点中的api promise返回对象

我试图理解承诺是如何工作的,而且显然错过了一些东西。 在节点中,我有一个使用Twit模块返回Twitter结果的search函数,然后我想用结果做一些事情: var twitter = require('../server/twit'); exports.getTwitSearchResult = function(query, cb) { var t = twitter.searchTwitter(query) // do something with variable 't' // var tweet = t.data.statuses // … // … cb(null, tweet); }; '../server/twit' twitter函数: var Twit = require('twit') var bot = new Twit(config); exports.searchTwitter = function(query){ var tsearch = function(query, callback){ return bot.get('search/tweets', { […]

蓝鸟承诺和域名

我有一个在蓝鸟承诺中抛出一个错误的问题。 采取以下代码: 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! 在控制台。 但是,似乎错误没有被捕获到域内,我在控制台中看到一个致命的错误和堆栈跟踪。 有谁知道为什么?

在多个文件中join一对多的关联

我正在研究一个到多个关联的续集。 大多数教程和文档都显示了两个模型在同一个文件中定义的示例。 我目前有两个文件,第一个city.js: const Promise = require('bluebird'); var Country = require('./country'); var City = sequelize.define("City", { id: { type: DataTypes.INTEGER, field: 'id', primaryKey: true, autoIncrement: true },… }, { freezeTableName: true, timestamps: false }); City.belongsTo(Country, {foreignKey : 'countryId', as: 'Country'}); Promise.promisifyAll(City); module.exports = City; 和第二个文件country.js: const Promise = require('bluebird'); var City = require('./city'); var Country […]

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

如何使承诺的打字稿工作?

所以,我在节点/ express / mongoose应用程序上使用打字稿,我试图让我的代码typecheck没有错误。 我定义这个mongoose模型: import * as mongoose from 'mongoose'; const City = new mongoose.Schema({ name: String }); interface ICity extends mongoose.Document { name: string } export default mongoose.model<ICity>('City', City); 和这个控制器: import * as Promise from 'bluebird'; import CityModel from '../models/city'; export type City = { name: string, id: string }; export function getCityById(id […]

在打字稿中,不能使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); 我收到以下打字错误。

使用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){ […]

在Bluebird中传递variables的正确方法是什么?

例如: redis.get('xfers:Turkey').then( data => { var GAME_ID = 25; return [returnPromise, returnPromise2] }).spread( (success, success2) => { //GAME_ID here is undefined }); 不过,你可以这样做: redis.get('xfers:Turkey').then( data => { var GAME_ID = 25; return [returnPromise, returnPromise2, GAME_ID] }).spread( (success, success2, GAME_ID) => { //GAME_ID here is passed }); 哪个工作正常,我只是觉得我做错了什么。 如果我有很多创build的variables,我需要传递很多arguments 。 (对于每一个连续的链) – 我很好奇,如果有一个更直观的方法,谢谢!

节点/蓝鸟/ 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 […]