Tag: 承诺

Node.js使用Q :: Q.ninvoke链承诺

我试图缩小与我的node.js服务器有关的内存问题的潜在原因。 我一直感到有点不舒服的一部分代码是我使用Q的承诺。 以下是我的基本结构: var Q = require('q'); MyClass.prototype.doSomething = function(somedata, callback) { var res = [];// will contain the results of each function call Q.ninvoke(this, 'doSomethingElse', 'hello!') .then((function(result){ res.push(result); return Q.ninvoke(this.someobject, 'someFunction', somedata); }).bind(this)) .then((function(result){ res.push(result); callback(null, res);// Returns both result objects, in an array }).bind(this)) .fail(callback) .done(); } 这看起来合乎逻辑吗? 如果doSomethingElse函数也使用promise,该怎么办? 这里的一切都是正确的吗?

承诺的节点模式

我有一个节点问题。 我想调用一个数据访问对象,可能还有其他的内容,一旦完成渲染一个Jade模板 就像是 : provider1.getData(args, function(error, results) { /* do something with each result element */ for(int i = 0l i < results.length; i++) { provider2.getData(args, function(error, items) { store.push(items); }); } }); /* Here I want to ensure that the above operations are complete */ result.render( …. , { data:store }); 基本上,我想确保数据检索完成之前,我与数据呈现模板。 目前,渲染发生时,variables存储不会被填充。 我看过看起来很有希望的承诺。 […]

承诺抛出未处理的错误的解决

我有下面的代码,但是当parsing被调用时,它抛出: Possibly unhandled Error: undefined at Promise$_rejecter (c:\projects\Test\promiseftp\node_modules\bluebird\js\main\promise.js:602:58) at WriteStream.<anonymous> (c:\projects\Test\promiseftp\index.js:45:33) at WriteStream.EventEmitter.emit (events.js:117:20) at fs.js:1598:14 at Object.oncomplete (fs.js:107:15) 代码如下: var Client = require('ftp'); var path = require('path'); var fs = require('fs'); var Promise = require('bluebird'); var c = new Client(); var connectionProperties = { host: "myhost", user: "myuser", password: "mypwd" }; c.connect(connectionProperties); var downloadFiles […]

node.js + sequelize +顺序执行

在我的节点应用程序中,我必须执行2个查询1之后(即)我必须执行基于第一个查询结果的第二个查询。 我的代码: var levels; try { sequelize.query("Select * from levels where country_id = " + level0 + "").success(function(results) { levels = results; }).failure(function(err) { if (err) { logger.error(err.stack); throw (err); } else { if (callback) { callback(err, null); } } }); } catch (err) { } if (level == 2) { query = "select *from […]

Q承诺不起作用,减lessfunction

我试图返回最早修改date的目录中的文件。 这种方法似乎在createFileDateMap函数中失败。 我想减less一个文件path的数组,并创build一个文件名和MODdate的对象。 getModDate函数是一个asynchronous的fs.lstat调用。 我似乎无法设置我的reducer的acc从.then()块内的值。 当值取决于asynchronous调用时,我不确定如何实现减less var _ = require('lodash'), fs = require('fs'), path = require('path'), Q = require('q'); function checkDir(dir) { // Check if given path is valid directory var deferred = Q.defer(); fs.lstat(dir, deferred.makeNodeResolver()); return deferred.promise.invoke('isDirectory'); } function getFiles(dir) { // Get all files within a directory var deferred = Q.defer(); fs.readdir(dir, deferred.makeNodeResolver()); […]

为什么这个嵌套的承诺,然后在承诺的方法之前执行?

我正在尝试使用promise来调用getLoginState,然后存储该值,以便稍后使用它。 我想知道为什么在下面的代码块,q.fcall(getLoginState)的.then里面getLoginState方法之前调用? var mysql = require('mysql'); var q = require('q'); var login = "tyler"; var connection = mysql.createConnection({ host : 'localhost', user: 'root', password: 'root', port: '3306', database: 'root' }); var gotLoginState; var state; connection.connect(function(err) { if(err != null){ console.log("connection err: "+err); } q.nfcall(connection.query.bind(connection),"SELECT id, password, salt, gender, banned, gm, pin, pic, characterslots, tos FROM […]

在arrays上推送相同的函数时调用asynchronous函数

我有这个代码: var queue = []; var allParserd = []; _.each(webs, function (web) { queue.push(function () { WebsitesUtils.parseWebsite(web, function (err, parsed) { allParserd.push(parsed); }); }); }); Promise.all(queue).then(function (data) { console.log(allParserd); }); 基本上我需要抓取我所有的网页,并确保在完成每个parsing之后给出结果。 函数parseWebsite返回正确的数据,但是这样不被调用, allParsed只返回一个空数组。 我相信我错过了一些事情,我已经开始使用诺言了,只是有些日子。 如果您需要更多信息,请告诉我。 Ps我想要所有的function同时启动; 我不想等待每一个回应。

雷迪斯多蓝鸟承诺

你知道一个使用Redbird客户端的多重交易命令蓝鸟承诺的方法吗? 因为,下面的代码永远不会结束。 var $redis = require('redis'), $p = require('bluebird'), $r = $p.promisifyAll($redis.multi()); $r.setAsync('key', 'test') .then(function(reply, data) { // … }); $r.exec(function() { $r.quit(); process.exit(); });

顺序运行大量的承诺

一个nodejs项目。我试图用承诺顺利运行大量(大约100k)任务。 我可以做的是将其转换为一个workOnebyOne函数与Q.有没有更好的方法来做到这一点? function workOnebyOne(items, worker) { var deferred = Q.defer() function _doNext() { if (items.length === 0) { deferred.resolve() return } var item = items[0] synchronize(worker, item) .then(function (result) { items = items.slice(1) deferred.notify({ item: item, result: result }) _doNext() }, function () { items = items.slice(1) _doNext() }) } _doNext() return deferred.promise } utils.workOnebyOne(tasks, […]

为什么随之而来的链式承诺解决了?

我正试图让我的头在Promises / A +的位置,而且我对两个点感到困惑。 考虑一下: function foo() { console.log("In 'foo' function: –> which returns a Promise"); return new Promise(function (resolve, reject) { resolve() }); } var promise1 = foo(); var promise2 = promise1.then(function () { console.log("Promise 1 has been resolved –> onFulfilled() returns a value"); return 1; }); var promise3 = promise2.then(function () { console.log("Promise […]