Articles of 承诺

Nodejsexpression和承诺不做我期望的

我正在尝试使用NodeJS构build一个loginAPI,但是我的代码并没有达到我期望的效果。 我对js,承诺等都很陌生,所以请尽可能简化任何答案。 从我的代码输出中可以看到,第一个promise部分不会等到函数findUsers(…)完成。 我有一个路线文件,我想依次运行几个函数: 查找用户是否存在于数据库中 如果(1为真)散列并input密码 …等 路线文件现在包含: var loginM = require('../models/login'); var loginC = require('../controllers/login'); var Promise = require('promise'); module.exports = function(app) { app.post('/login/', function(req, res, next) { var promise = new Promise(function (resolve, reject) { var rows = loginM.findUser(req.body, res); if (rows.length > 0) { console.log("Success"); resolve(rows); } else { console.log("Failed"); reject(reason); } […]

从承诺中返回数据到中间件

我是新的nodejs,这可能看起来很平凡,但我从检索返回承诺的函数的数据时遇到问题。 中间件的响应被发送回前端。 这是我的代码 // middleware app.get('/player', function(req, res) { //data i want to return res.send(getPlayerStats.getPlayerId(req.query.name))); }); //getPlayerStats.js var getPlayerId = function(name) { return start(name) .then(getPlayerInGame) .then(getPlayerStats) .then(getPlayers); //.then(sendToSingular) } //getplayers function var getPlayers = function(data) { return data; } 我是以错误的方式发回数据? 我在前端看到的回应是一个具有原型作为唯一属性的对象。 我可以打印出getPlayers()中的数据,我发现它工作正常。

JavaScript的承诺 – 创build一个承诺一起执行的数组

我正在使用Node.js对noSQL DynamoDB进行asynchronous调用。 我首先查询该帐户属于哪个“好友列表”。 这可能会从零返回到“n”个新的主键,其中将包含每个这些好友列表的所有成员的列表。 把他们想象成一个人所属的俱乐部……你可能没有或多less; 每个俱乐部有几个成员甚至一个。 到目前为止(我在这里第一次使用Promises …虽然我已经在之前的JA项目中使用了callback函数),但是我知道我在哪里,但是我知道我错误地组装了Promise数组。 也就是说,我可以在控制台中看到.then函数在两个promise均parsing之前执行。 为了logging,我确实期望……任何一个单独的承诺解决都可以得到满足似乎是合理的。 不pipe怎样,有人可以提供一些关于如何构build的提示? 我想结束伪: getBuddyLists。然后(getAllTheBuddiesInTheLists).then(function(){// doSomething}); 我的Node.js代码: const AWS = require('aws-sdk'); const docClient = new AWS.DynamoDB.DocumentClient({region:'us-east-1'}); var buddyGroups = []; exports.handler = function(event, context, callback) { var params = { TableName: 'USER_INFORMATION', Key: { "DEVICE_ID": event.DEVICE_ID } }; var getBuddyList = new Promise(function(resolve, reject){ docClient.get(params, function(err, data){ […]

Javascript的承诺模式 – 区分错误

考虑这个代码块: getUser(userId) .catch(function(error){ crashreporter.reportError('User DB failed', error); // show user a generic error }) .then(function(user) { return chargeCreditCard(user); }) .catch(function(error){ crashreporter.reportError('Credit card failed', error); // show user an error saying that their credit card got rejected }) 显然,这个问题是THEN(USER)块在用户DB失败的情况下被执行。 另一个select是将第一个catch块移动到链的末尾。 但是,这会导致另一个问题! 我们将无法区分错误是来自User DB还是CreditCard。 下面的模式,我认为解决问题,认为是一个承诺反模式? 有没有更好的方法来做到这一点? 我看到的问题是,你可以在半callback地狱。 getUser(userId) .then(function(user) { return chargeCreditCard(user) .catch(function(error){ crashreporter.reportError('Credit card failed', error); […]

node.js函数返回未定义的值

我有一个问题,从数据库与node.js获得restaurantname,它似乎必须做一些callback参数,但我不能find我的情况的解决scheme,希望你们中的一个可以帮助我。 我做了一个从数据库中获取餐厅名称的函数。 第一个控制台日志行给出了正确的retvalue,第二个给出了未定义的,我怎么写代码,以便返回值是餐厅的名称? 亲切的问候,罗伯特 function restaurantName(id) { var retvalue; try { F.model('restaurant').load(id).then(function (restaurant) { retvalue = restaurant.Name; console.log('restaurantName 1(' + id + ')' + retvalue); }) } catch (err) { retvalue = 'Error'; } console.log('restaurantName 2(' + id + ')' + retvalue); return retvalue; };

承诺如何创build?

我对Promise对象的理解如下: var Promise = { then: function() { … }, catch: function() { … } }; 如果我有下面这个代码有一个函数,并返回一个Promise对象( fetch.js ): var xhr = require('xhr') module.exports = function (uri) { return new Promise(function (resolve, reject) { xhr(uri, function (err, res, body) { if (err) return reject(err) if (res.statusCode !== 200) return reject(new Error(body)) resolve(body) }) }) } […]

承诺不会按顺序执行javascript

我有下面的代码片段使用承诺执行。我有的问题是承诺没有执行顺序等待第一个块执行之前,继续下一个块 下面是代码: array[] new Promise(function(resolve, reject) { //userarray is some array with user id's userarray.forEach(function(entry) { User.findOne({ user_id: entry}, function(err, user) { if (err) throw err; console.log(user.name); array.push(user.name); }); }); resolve("success"); }) .then(function() { console.log(array); console.log("done"); }); 下面是输出 [] //数组仍然是空的 DONE 汤姆 迪克 掠夺 当我想要的是 汤姆 迪克 掠夺 [“汤姆”,“迪克”,“哈里”] DONE

Promise.prototype.then()行为

我有这个承诺: var seasonalityArray; … aService.gettingAnalysis(site, cohortKey) .then(function (result) { let date = moment(); seasonalityArray = result.cooling.getSeasonMonths(date); }) , function (error) { console.error('An error occurred', error); }; const totalAccounts = _.size(report.asModel().accountNumbers); const warnings = _.compact(_.map(seasonalityArray, function (monthLabel) { … })); … aService.gettingAnalysis = function (site, Key) { return Promise.all([ aService.findingHeat(site, Key), aService.findingCool(site, Key) ]).spread(function (heating, cooling) […]

NodeJs,诺言不等

我有这个function,应该使300请求一个网页(基准testing),但是Promise.all没有等待这些请求完成之前输出一个空的数组,任何想法? function requestLoop(){ var resultSet= []; // options.requests = 300 // options.url = http://localhost/ for(var c=1;c<=options.requests; c++){ http.get(options.url, function(res){ // resultSet.push( { request: c, statusCode: res.statusCode}); resultSet.push(new Promise(function(res){ return { request: c, statusCode: res.statusCode}; })); }); } Promise.all(resultSet).then(function(){ console.log(resultSet); }); return; } Promise是蓝鸟,http是普通的http包

ES6 Dyanmic Promise从arrays链接

脚本 我有一个我需要下载的URL数组,但每个都必须提供唯一的事务ID,必须从服务器请求,并且只有在请求成功时才会增加。 问题 当我循环访问数组时,我需要等待事务ID的请求和文件的请求,然后开始下一个迭代循环,但是文件的数量不是固定的,所以需要dynamic地构build一个链承诺。 伪代码 下面是一些伪代码,getFiles()是问题,因为所有的请求获得相同的事务ID,因为他们不等待前一个请求完成。 function getTransationId(){ return new Promise((resolve,reject)=> { let id = getNextTransactionId(); if(id!=error){ resolve(id); }else{ reject(error); } }) } function getFile(url, transactionId){ return new Promise((resolve,reject)=>{ http.request(url+transactionId, function(err,response){ if(err){ reject(err); }else{ resolve(response); } }); }); } function getFilesFromArray(urlArray){ for(let url of urlArray){ getTransactionId().then(resolve=>getFile(url,resolve),reject=>console.error(reject)); } } 题 我如何dynamic链式承诺? 回答 这是一个Ovidiu的回答JSFiddle