Tag: es6 promise

承诺的正确解决scheme

我有连接到firebase的node.js上的应用程序。 我需要正确更新数据。 如何在函数getOrSetUserTrackDay(day)中调用promise来获得一个很好的值,但不是undefined? let userData = []; let userID = req.params.userID; let today = req.params.today; let yesterday = req.params.yesterday; db.collection('users').doc(userID).get() .then((userDataFromDB) => { if (!userDataFromDB.exists) { res.status(404).send('User not found'); } else { function getOrSetUserTrackDay(day) { let userTrackRef = db.collection('history').doc('daily').collection(day).doc(userID); userTrackRef.get() .then(userTrackData => { if (userTrackData.exists) { return userTrackData.data(); // good } else { let userNewData […]

在承诺中引发的exception不会显示

我正在开发一个严重依赖于Promise的节点模块。 出于某种原因,当Promise代码中出现exception(例如“undefined不是函数”)时,exception消息不会显示在控制台中 – promise链似乎停止了,没有任何反馈,我只能做猜猜是什么原因造成的。 我如何强制Node显示所有exception?

如何持有NodeJS应用程序,直到其他承诺完成

使用NodeJS的承诺,我加载了一个模型,然后通过后续调用NodeJS应用程序来重用。 如果第二个请求在第一个请求仍然被加载时到达,我怎样才能防止从数据库中加载两次相同的对象/模型? 我设置了一个“加载标志”来表示对象正在从数据库中检索,并在完成时“加载”。 如果有第二个请求尝试加载同一个对象,则需要等待,直到初始模型被填充,然后两者都可以使用同一个对象。 示例代码(简化,ES6,节点0.10 [有原因的旧])。 这是需要解决的TODO。 应用程序: import ClickController from './controllers/ClickController' import express from 'express' const app = express() app.get('/click/*', (req, res) => { // Get the parameters here let gameRef = "test"; ClickController.getGameModel(gameRef) .then(() => { console.log('Got game model') return this.handleRequest() }, (err) => { throw err }) } 控制器: import gameModel from […]

Node.js(ES6) – 用Promise.all保证控制stream

我正在尝试创build一个处理并行HTTP请求的队列。 为每个HTTP请求生成一个请求对象,例如 { method: 'POST', uri: 'http://posttestserver.com/post.php', body: { some: 'foo' }, json: true } 我传入这些对象的数组,并希望将它们添加到队列中,然后执行实际的请求。 问题 :Promise.all语句在返回之前等待所有请求完成。 问题 :我希望将所有任务添加到队列中,并在每个请求完成后返回 ,而不是等待它们全部。 任何人都可以build议如何分开逻辑,使请求从任务添加到队列? 注意:promise-queue和request-promise都返回promise。 这是我有: "use strict"; const Queue = require("promise-queue"); const rp = require('request-promise'); const maxConcurrent = 10; const maxQueue = Infinity; const queue = new Queue(maxConcurrent, maxQueue); var options = [ { method: 'POST', […]

使用node-mysql的节点承诺不会让应用程序终止

我使用Node Promise(本地实现)来链接MySQL查询。 我为MySQL连接使用node-mysql库。 var mysql = require('mysql'); var db = mysql.createPool({ host: 'localhost', user: 'root', password: 'root', database: 'database' }); 该function非常简单,并返回一个Promise: function query(sql, repl) { return new Promise(function(resolve, reject) { db.getConnection(function(err, connection) { if (err) reject(err); else { connection.query(sql, repl, function(err, rows) { connection.release(); if (err) reject(err); else resolve(rows); }); } }); }); } 但是,当我运行它,应用程序永远不会终止。 […]

用mongodb更新多个文档

如何迭代一个对象数组来使用mongodb更新文档,并保留修改后的文档返回到响应中 注意代码中的注释 .put(function (req, res) { var data = req.body.data; var documents = []; for (var item in data) { var id = data[item]._id; var document = data[item]; Item.update({ _id: id }, document, { overwrite: true }, function (err, item) { if (err) { res.send({'error':'Error'}); } Item.findById(id, function (err, document) { if (err) { res.send({}); […]

在NodeJS中嵌套MongoDB查询

我想用NodeJS从MongoDB中的两个集合中进行select。 我从chat_messages集合中select了一个userId属性,我想借助ES6 Promise将结果对象扩展为用户名。 我试过这个: db.collection("chat_messages") .find({"room" : roomName}) .sort({"created" : 1}) .toArray() .then(function(messages){ console.log(messages); return Promise.all(messages.map(function(message){ return db.collection("chat_users") .find({"id" : message.userId}) .limit(1) .toArray() .then(function(users){ message.userName = users[0].name; }); })); }) .then(function(messages){ console.log(messages); }) .catch(function(error){ // … }); 第一个console.log打印这个: [ { _id: 573b6f2af9172fd81252c520, userId: 2, … }, { _id: 57388bd913371cfc13323bbb, userId: 1, … } ] 但第二个看起来像这样: […]

取消ES6承诺

是不是可以通过调用Promise.reject(reason)来取消ES6承诺? 像这样的东西: Promise.resolve().then(function () { return 'foo'; }).then(function () { return console.log('we were here'); }).then(function () { return Promise.reject({type: 'canceled'}) }).then(function () { return console.log('never visited'); }).catch(function (e) { console.log(e); }); 通过Promise.reject “取消”承诺有什么不利吗?

Node.js – 在ES6承诺链中抛出exception

作为我正在开发的Node.js / Express API的一部分,我已经构build了一个自定义error handling程序,可以在需要时抛出特定的错误,例如BadRequest或NotFound等。 当我想要抛弃承诺链时,就会出现问题。 例如: db.doSomethingAsync().then(data => { if(data.length === 0){ throw new errors.ResourceNotFound({ resource: "foo" }); } }); 经过对这个话题的大量阅读后,我发现这个错误会被诺言所吞噬,从而导致一个未被处理的Promise拒绝。 我知道我可以拒绝,但我不知道如何才能处理具体的错误(而不是一个拒绝,我不想要)。 另外,要拒绝,我不需要在我的承诺链里创造一个新的承诺吗? 这感觉凌乱。 任何人都可以build议如何处理在承诺链中抛出一个特定的exception?

如何使用Node Js Promise按顺序执行函数?

我是新来Node js Promise我不确定我是否正确使用Promise,所以这是我的代码。 function print(){ first('first') .then(second('second')) .then(third('third')); } function first(a){ return new Promise((resolve, reject) => { var res1 = function (){ resolve(a); } }); console.log(a); } function second(b){ return new Promise((resolve, reject) => { var res1 = function (){ resolve(b); } }); setTimeout(() => { console.log(b); }, 2000); } function third(c){ return new Promise((resolve, […]