Articles of 蓝鸟

这是正常的bluebird / node.js / expresserror handling?

所以,我做了这个愚蠢的错字,花了我相当多的时间来find它,因为我总是从执行mongoose查询中得到一个空的错误。 我重新创build了一个更通用的行为。 var express = require('express'); var router = express.Router(); var Promise = require('Bluebird'); router.patch('/test', function (req, res, next){ var testPromise = new Promise(function (resolve, reject) { resolve(); }) .then(function(result){ if(thisIsAnExampleTypo){} res.status(200).json({ message: 'this will no be executed because of the typo', object: result }); }) .catch(function(err){ //console.log(err); return res.status(500).json({ title: 'This will execute because […]

麻烦与js诺言(蓝鸟)

我试图从列表中创buildMailChimp中的合并域,如果它们不存在。 如果他们不存在,我希望他们被推到承诺的列表,我使用promises.all以确保所有必要的列表项已被添加。 这不是工作。 我究竟做错了什么? var productDict = [] var getMergeNumPromise = new Promise( function(resolve, reject) { // call to mailchimp to get the number of merge fields rp({ uri: MAILCHIMP_MERGEFIELDS_URI, qs:{count:1}, json:true, headers:MAILCHIMP_HEADER }) .then(function( mergeFieldList ) { console.log("total items: " + mergeFieldList.total_items) resolve(mergeFieldList.total_items) }) .catch(function(err) { console.log("error getting merge field count: " + err) […]

Node.js和MongoDB顺序写入导致竞争状态?

(实际问题:这是顺序写入mongodb,不会导致竞争条件,并且是非阻塞的正确方法?) 我正在尝试在mongodb中完成文档的顺序写入/更新。 操作的顺序是有一定的关键的。 在下一个操作发送到数据库之前必须完成一个操作。 我现在所做的方式是使用Bluebirds Promise.mapSeries()循环请求,并对正确的集合执行正确的操作。 数据库函数然后返回一个Promise给循环。 我相信这是正确的事情。 当承诺解决后,下一次迭代将被解雇。 我相信这也应该是非阻塞的。 对于这个问题。 一堆插入和集合包含大约500k文件后,更新开始失败。 我想要更新的状态不会反映在数据库中。 mongo中没有任何迹象表明操作失败,更改不在数据库中。 数据库是正确的索引,所以不应该在我看来是一个问题。 I / O负载相当高。 目前在开发testing中,每秒大约有250个操作。 在生产这个数字可能是200倍左右。 这里是我现在这样做的片段: Promise.mapSeries(testResults, (result) => { if (result.test) { // Save sequence results and status if (result.test.testSequence) { const coll = db.collection(collection); // query = result.test.id; // newValues = result.test; const options = { upsert: true, […]

如何处理Typescript和Promisify / PromisifyAll

我想知道TypeScript开发人员如何处理Promisify和PromisifyAll并丢失所有types和代码提示。 我是否错过了一些明显的东西,这个工具可以帮助我们在这里? 我觉得像'PrmosifyAll @ types / module'必须是一个有人工作的项目。 我希望我失去了一些明显的东西,因为现在打字稿很长时间以来第一次缺乏。

用promise生成数据集

我目前正在尝试生成一个javascript对asynchronous调用数组,但我似乎无法得到正确的顺序。 generateDataPoints: function (iterable, source, arg) { let pairs = [] let prevTime = 0 for (let index in iterable) { let event = iterable[index] getTime(event.valueOf()).then(function (time) { query(source[arg], event.valueOf()).then(function(val) { if (time !== prevTime) { prevTime = time pairs.push([time, val]) console.log(pairs) // This works as expected but only happens after the program returns } […]

什么是明确的承诺build设反模式,我如何避免它?

我正在编写的代码看起来像这样: function getStuffDone(param) { | function getStuffDone(param) { var d = Q.defer(); /* or $q.defer */ | return new Promise(function(resolve, reject) { // or = new $.Deferred() etc. | // using a promise constructor myPromiseFn(param+1) | myPromiseFn(param+1) .then(function(val) { /* or .done */ | .then(function(val) { d.resolve(val); | resolve(val); }).catch(function(err) { /* .fail */ | […]

Node.js + Bluebird + csv:额外项目

我有下面的代码下载CSV文件: function download_csv(symbol) { var req_url = url + '&s=' + symbol var filename = '/prices/' + symbol + '.csv' return request.getAsync(req_url) .then(function(resp) { fs.writeFileAsync(filename, resp) }) } Promise.map(symbols, download_csv, {concurrency: 128}) .error(function(e) {console.error('error ocurred: ', e.message)}) .done(function() {console.log('done')}) 当我打开csv文件时,第一行右移1列: [object Object] Date Open High Low Close Volume Adj Close 第一列应该说Date,而不是[object Object]。 我的代码中有什么错误?

在promise链中创build错误

我将如何检查一个属性的JSON,如果它缺less返回一个错误退出和捕捉链? var Promise = require("bluebird"); var fs = Promise.promisifyAll(require("fs")); fs.readFileAsync("myfile.json").then(JSON.parse).then(function (json) { if (!json.prop) return new Error("missing prop"); return json; }).catch(SyntaxError, function (e) { console.error("file contains invalid json"); }).catch(Promise.OperationalError, function (e) { console.error("unable to read file, because: ", e.message); }); 从蓝鸟文件取得的例子。

蓝鸟承诺和Sequelize模拟交易primefaces性

我正在使用bluebird.js承诺和sequelize.js来模拟我的网站上的交易。 基本上我尝试在processTransactions中做一些事情,如果一切正常,我会t.commit()事务,否则我会t.rollback()事务。 另外我正在使用bluebird.js承诺做控制stream程。 这里是代码: var processTransactions = function(transactionmain, transactionlist, t){ // code to process transactions }; var processtransaction = function(transaction_id) { // t need to be passed in so we can choose // t.commit() or t.rollback() the transaction sequelize.transaction(function(t){ return Promise.resolve({}).bind({transactionmain: […], transactionlist: […]}) .then(function(){ return [this.transactionmain, this.transactionlist, t]; }) .spread(processTransactions) .then(function(){ t.commit().success(function() {}) }) […]

平行mongoose与promises /蓝鸟查询?

我有一个使用mongoose的nodejs / mongodb项目,还有蓝鸟的承诺。 这是我的问题:我有一个函数,有时需要执行1个查询,有时2个并行查询,然后join两个查询的结果。 这里是一个伪代码(因为我使用咖啡文本,但是这是不相关的): function(param) { // 1st query query1.exec // 2nd query, should be done in parallel with the 1st if (param) query2.exec // process requiring result from both queries callback() } 我知道如何执行asynchronous并行任务,但我不明白如何执行与蓝鸟或mongoose承诺。 谢谢,