Articles of 承诺

我怎样才能节制堆栈的API请求?

我有一个id数组,我想为每个id做一个api请求,但是我想控制每秒有多less个请求,或者更好的是,在任何时候只有5个打开的连接,并且当一个连接是完成,取下一个。 目前我有这个,它只是在同一时间发射所有的请求: _.each([1,2,3,4,5,6,7,8,9,10], function(issueId) { github.fetchIssue(repo.namespace, repo.id, issueId, filters) .then(function(response) { console.log('Writing: ' + issueId); writeIssueToDisk(fetchIssueCallback(response)); }); });

节点redis promisification使用蓝鸟

我试图使用node-redis包的承诺,但我不能使用on.connect()方法。 var redis = require("redis"); var client = redis.createClient(); bluebird.promisifyAll(redis.RedisClient.prototype); bluebird.promisifyAll(redis.Multi.prototype); // callback version app.get('/redis', function(req, res) { client.set("foo_rand000000000000", "some fantastic value", function(err, reply) { if (err) { console.log(err); } else { console.log(reply); } res.end(); }); }); // promisified version app.get('/redis', function(req, res) { return client.setAsync("foo_rand000000000000", "some fantastic value").then(function(return) { console.log(return); // returns OK client.quit(); […]

这个代码中传播函数的目的是什么?

我想弄清楚如何使用mysql-promise。 https://www.npmjs.com/package/mysql-promise 这里是一些示例代码; var db = require('mysql-promise')(); db.configure({ "host": "localhost", "user": "foo", "password": "bar", "database": "db" }); db.query('UPDATE foo SET key = ?', ['value']).then(function () { return db.query('SELECT * FROM foo'); }).spread(function (rows) { //what's purpose of spread()? console.log('Loook at all the foo', rows); }); 传播函数的目的是什么? 它究竟做了什么?

在NodeJS,JXcore等下可能运行的代码如何检测它是否在支持本机ES6承诺的环境中运行?

例如,我有当前版本的官方Joyent NodeJS,当然还有Google V8 JavaScript引擎,还有带有Mozilla SpiderMonkey JavaScript引擎的JXcore。 前者似乎来源于原生的诺言支持,后者似乎不是。 (当然,这些并不是nodeJS代码可能运行的唯一两种可能的环境。 我的代码如何testing它的环境以查看它是否可以使用本机Promise? 在这种情况下,如果它检测到一个合适的polyfill是“本地的”就可以了。 但是它不应该检测出像Q这样的本地承诺。 (或者让我知道,如果我错了这个。)

Promise.all当它从.then()callback返回时不工作

我正在使用Promise Node.js库,我想要做到以下几点: 执行返回Promise的asynchronous操作。 当该操作完成时,返回两个并行asynchronous操作完成时完成的Promise。 我使用的代码如下: var Promise = require('promise'); var resolved1 = Promise.resolve(1); var resolvedAll = resolved1.then(function() { return Promise.all(Promise.resolve(2), Promise.resolve(3)); }); var print = resolvedAll.then(function(values) { console.log(values); }); print.done(function () { console.log('done'); }); 但是,这个代码不能按预期工作,因为它打印: [] done 从docu中,Promise.all返回一个promise,当迭代参数中的所有promise都解决了的时候,这个promise就会被parsing。 所以在理论上解决所有的承诺应该完成,直到所有的承诺传递给承诺, Promise.all已经完成,但这不是在这里发生的事情。 任何想法为什么Promise.all不按预期工作? 这可能是一个错误? 任何人都知道的替代scheme返回一个.then()callback多重承诺? 欢呼声,高尔德

ExpressJS / NodeJS / Promises:从承诺链早期返回

当我在服务器上发布一个请求来创build一个新的游戏时,我会执行一些查询。 首先,我search用户是否已经在游戏中,如果是,则返回游戏。 否则,我search一个开放的游戏,在这个游戏中有人正在等待对手,如果是这样的话,就返回那个游戏。 最后,如果没有发现上述状态的游戏,我创build一个新游戏并返回。 所以我的代码看起来像这样: .post( function(req, res, next){ …findUsersExistingGame… .then(function(game){ if(game){ return res.send(game); } else{ return …findUserWaitingForOpponentsGame… } } .then(function(game){ if(game){ return res.send(game); } else{ return …createNewGame… } }) .then(function(game){ return res.send(game); }) .catch(function(err){ return next(err); }); 我最终将每个函数重构为辅助函数,以提高可读性,但是我需要首先确定链接。 我的问题是,如果我在承诺链中早期发现一个游戏(即,有一个用户的现有游戏或另一个正在等待对手的用户),则返回res.send(游戏)。 然而,第三个.then会抛出一个错误,因为我以前的.then()语句返回undefined。 如果我想做一个res.send(游戏),我如何早日退出承诺链? 选项1:我已经看到了一些build议来抛出一个错误,并明确地捕捉错误,但是这种感觉从根本上是错误的,使用错误来控制stream量。 scheme2:我可以做这样的事情,而不是链接承诺,但是类似于“promise / callback hell”: .post( function(req, res, next){ …findUsersExistingGame… .then(function(game){ if(game){ return […]

Node.js:在parsing()被调用之前parsingPromise?

我对Node.js及其asynchronous行为很陌生。 我试图拿一个文件,保存它的副本,追加一行到复制的文件,并开始使用复制的文件 – 按顺序。 这大概是我现在所拥有的… var first = new Promise(function(resolve, reject) { console.log("1"); var readStream = fs.createReadStream("file.txt"); var writeStream = fs.createWriteStream("file-copy.txt"); readStream.on("end", function () { writeStream.end(); }); var pipeAction = readStream.pipe(writeStream); pipeAction.on("close", function() { console.log("2"); resolve(); }); }); var second = new Promise(function(resolve, reject) { console.log("3"); fs.appendFile("file-copy.txt", "\nA NEW LINE TO INSERT", function (err) { […]

在Promise返回函数中find第一个成功

给定一些function,返回承诺: function foo(arg) { return new Promise(function(resolve, reject) { if (stuff(arg)) { resolve('result from foo'); } else { resolve(null); } }); ); // … maybe more of these functions … function bar(arg) { return new Promise(function(resolve, reject) { if (otherStuff(arg)) { resolve('result from bar'); } else { resolve(null); } }); ); 我们怎样才能以串行方式迭代函数,在第一个函数返回一个非空值之后短路呢? [ foo, // […]

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()中的数据,我发现它工作正常。