Tag: 承诺

NodeJS我的SQL查询与链承诺

我有3个function,我想调用这个function一步一步,例如,当我将调用第一function和得到的结果,我不得不调用第二个function,并传递从第一次调用返回的参数。 在完成第二次调用之后,我必须调用第三个函数并传递从第二个函数返回的参数。 #1: getCategory = function (branch_id) { var deferred = q.defer(); var categoryData; var query = 'SELECT id,name,price,currency FROM category where branch_id=?'; pool.getConnection(function (err, connection) { connection.query(query, [branch_id], function (error, row, fields) { if (error) { deferred.reject(error); } else { connection.release(); deferred.resolve(row); } }); }); return deferred.promise; } #2: getRoom = function (branch_id, categoryID) […]

JavaScript / Node.JS在另一个诺言中返回诺言不起作用

我对这些承诺有些困惑,不明白为什么我不能将承诺交还给另一个承诺。 我的问题是以下,我有一个function保存: save(Driver) { this.exists(Driver).then(exist => { if(exist) { return new Promise(function (resolve, reject) { if (exist === true) { resolve(true); } else if (exist === false) { resolve(false); } else { reject(err); } }); } }); }; 就像这样简单,当我尝试调用这个函数如下: save(driver).then(this.common.saveSuccess(res)) .catch(this.common.noSuccess(res)); 我得到一个错误,说Cannot read property 'then' of undefined ,我不明白为什么,因为我回来的承诺。 谢谢你的帮助

节点:将function传递给承诺

我是Node新手,从来没有做过很多前端Web开发或Javascript,但我正在尝试做一些简单的前端任务,并看到我不明白的错误。 我已经阅读了一些关于我看到的错误的文章,但是很多没有被接受的答案,而其他的则似乎没有关系。 在David Herron的“Node.js Web Development”一书中,我也仔细阅读过有关承诺的章节,所以我想我理解promise中的想法,但是我所看到的一些错误让我感到困惑。 我正在运行一个express.js服务器。 我有一个查询方法在一个文件query.js(简化)需要一个键,并返回一个值,看起来像这样: 'use strict' function query(key) { return Promise.resolve().then(() => { // … lots of stuff and more '.then' things }).then((arg) => { return arg[0] // this is always a string } module.export.query = query 然后我有一个server.js文件,其中包含快递服务器的代码。 一种方法有效,一种方法不行,我不知道有什么区别。 以下是按预期工作的方式: const express = require('express') const bodyParser = require('body-parser') const app = […]

解决此问题时,Promiseparsing为null

我有一个连接到API的函数。 该函数返回一个Promise。 我不明白为什么Promise.resolve返回null,当我用包含this上下文的常量解决。 const connect = () => { return new Promise((resolve, reject) => { Gitana.connect(config, function(err) { const platform = this; if (err) { return reject(err); } console.log(platform) // Object that I want resolve(platform) }); }); } connect() .then(platform => { console.log(platform) // null }) 我不知道是否有任何帮助,但我知道parsing对象(平台)上有一种方法称为数据存储。 如果我解决该方法,即resolve(platform.datastore)我得到的方法,而不是null 我试图解决静态值, resolve(25)或resolve('hello')并正常工作。 如何返回/parsing对象?

历史更新mysql节点js

您好我使用节点JS与MYSQL,并试图查看历史更新如何与node-mysql一起工作。 我遇到了一个问题,当我尝试更新表中的ID行时,我想获取该行,使用新的时间戳更新它,然后插入一个ID为2的新行,但没有更新时间戳。 例 ID | Owner | app | status | INSERT_DT | UPDATE_DT 1 11 Ok 1 2015-15-20 13:00:21 NULL 现在当我通过改变状态更新上面的行时,应该会出现 ID | Owner | app | status | INSERT_DT | UPDATE_DT 1 11 Ok 1 2015-15-20 13:00:21 20-15-20 12:00:12 2 11 Ok 0 2015-15-20 12:00:12 | NULL 所以我得到这样的行 getUserPath = (Owner) => new […]

具有最大并发性的asynchronous并发队列

我遇到了一个自定义asynchronous队列,一次调用10个asynchronous函数的错误。 我开始有50个工作的队列,一旦前10个工作完成,队列移动到随后的10个,直到完成全部。 我遇到的错误是,一旦它完成了50,它将重新开始前5个工作,每次2或3或1个工作。 在队列结束时,还需要less于10个工作。 请创build这两个文件,并用摩卡testing,并亲自看到输出。 注意 :将摩卡的超时设置为0可以使testing长时间运行。 Queue.js function Queue(func, max) { this.jobs = []; this.func = func; this.max = max ? max : 10; } Queue.prototype.push = function(data) { var self = this; return new Promise(function(resolve, reject){ self.jobs.push({data: data, resolve: resolve, reject: reject}); if(!self.progress) { self.progress = true; self.run(); } }); }; Queue.prototype.run = […]

如何将一个asynchronous节点function变成一个承诺

我有这个asynchronousfunction,我想变成一个承诺 var myAsyncFunction = function(err, result) { if (err) console.log("We got an error"); console.log("Success"); }; myAsyncFunction().then(function () { console.log("promise is working"); }); 我得到TypeError:不能调用未定义的方法。 这段代码有什么问题?

我如何链接与Q的嵌套承诺? 我无法让他们按照正确的顺序运行

我希望能够链接自己可能包括链式方法的方法。 日志应该是“第一,第二,第三”。 但实际上却是“第二,第三,第一”。 我知道这个代码有点多余,但我只是想了解promises / node如何执行。 我将如何编写可以链接在一起的基于承诺的函数? user.increaseReadings(id) .then(function(val) { console.log("second",val); return user.findById(id); }) .then(function(val) { console.log("third",val); res.json(val); }); } 从/models/user模块: exports.findById = findById; function findById(id) { deferred = Q.defer(); User.findById(id, function(err, doc) { if (err) return deferred.reject(err); deferred.resolve(doc); }); return deferred.promise; } exports.increaseReadings = increaseReadings; function increaseReadings(id) { deferred = Q.defer(); findById(id).then(function(doc) { <– […]

同步asynchronous创build的承诺

我正在做一个小的nodejs程序,并且有一些麻烦知道程序的所有asynchronous操作何时完成。 目前,该程序执行以下步骤: 1 /用一些参数产生一个进程。 这个过程将在其stdout上打印数据。 2 /听取进程标准输出“数据”事件,每次打印某些东西时,程序会调用一个函数(我们将称之为“进程”),使用这些数据。 3 /这个过程函数将最终将数据插入到mongo数据库并发送消息给amqp服务器。 3 /当没有更多数据时,由于与amqp和mongo数据库的连接仍然存在,所以程序空闲,所以我需要知道所有工作何时能够closures连接。 所以,我试图使用when.js来使用promise,但是我不能让它为我想要实现的目的而工作。 我让“process”函数返回一个promise,当mongodb insert和amqp消息发送完成后,这个promise就会被parsing。 在我的程序中,我正在创build一个数组,它将接收所有可以调用when.all()以了解何时全部parsing的承诺。 但是,因为当生成的进程将数据打印到它的stdoutstream时,我正在asynchronous创buildpromise,所以调用when.all()是由一个看起来立即解决的空数组构成的。 这里是一个代码示例,说明我实现了什么: var when = require('when') , _ = require('lodash') , cp = require('child_process'); var promises = []; function process(data) { var deferred = when.defer(); setTimeout(function () { deferred.resolve(true); }, 3000); // Let's say we need 3 seconds to process […]

使用映射并将对象传递给后续的函数调用

我有这样的代码: var downloadFiles = function () { console.log('downloading files'); aFtpClient. listAsync(). then(processListing). map(function (object) { return processItem(object); }). then(downloadItem). catch (TypeError, function (e) { console.dir('arse' + e); }). catch (Promise.RejectionError, function (e) { console.error("unable to read file, because: ", e.message); }); console.log('after downloading files'); }; processListing返回一个包含source和destination属性的对象数组。 我用map来处理数组并调用processItem 。 有没有办法将映射的对象传递给downloadItem ?