Tag: promise

用额外的数据扩展承诺

我使用kriskowal/q promise库来处理http请求,但为了简化,我们假设我有一个dynamic创build的promises数组,并将其推送到promises数组: var promises = [], ids = ['foo', 'bar', 'buz']; ids.forEach(function(id){ var promise = Q.fcall(function () { return 'greetings with ' + id; }); promises.push(promise); }); // and handle all of them together: Q.all(promises).then(function (results) { console.log(results); }); // gives: [ 'greetings with foo', 'greetings with bar', 'greetings with buz' ] 问题是 – 有可能以某种方式分配一个id到承诺,以后在all执行中获得它? […]

如何从Q.when()parsing一系列分辨率?

我对诺言相当Q.when() ,并且在Q.when()链中出现了问题。 我想顺序执行我的承诺。 这是我到目前为止。 它正在顺序运行,但它不能解决我的url。 parseUrls(urls)应该返回一个包含所有parseUrl(url)分辨率的数组。 function parseUrl(url) { return function () { var deferred = Q.defer(); // setTimeout as async placeholder setTimeout(function() { var result = {url: url}; deferred.resolve(result); } return deferred.promise; } } function parseUrls(urls) { var deferred = Q.defer(); var chain = Q.when(); urls.forEach(function (url) { chain = chain.then(parseUrl(url)); }); chain = […]

Node js中的多个promise

我是nodejs的新手,并努力寻找下面这段代码的问题。 所有我想要实现的是,一个接一个地调用几个方法,如果所有的调用都成功,那么返回成功,否则抛出一个错误,如果任何方法失败。 我的问题是,在所有的方法被执行之前,主要方法终止,即使承诺尚未满足。 主要方法 processRequest(neworder).then(function (done) { console.log('Successfully processed the order' + done); res.sendStatus(200); }).fail(function (error) { res.status(404).send(error); }) 其他方法调用 module.exports.processRequest = function (Order) { var deferred = Q.defer(); findX(Order) .then(findYBasedOnPrevOutput) .then(findZBasedOnPrevOutput) .then(deferred.resolve()) .fail(function (err) { console.log('Failed to process request' + err); deferred.reject(err); }); return deferred.promise; } var findX = function (order) { var deferred […]

使用q的诺言与地图获取文件内容

我正在尝试使用q promise库来获取目录中的.json文件的名称并返回这些文件的内容。 我能够得到文件名,但是我在使用arr.map和promise来读取文件的内容时遇到了麻烦。 我想getContents()返回一个映射数组与指定的文件名的内容。 function readDir() { var deferred = q.defer(); fs.readdir('users', function(err, data) { if (err) console.log(err); deferred.resolve(data); }) return deferred.promise; } function getContents(filenames) { return filenames.map(function(filename) { fs.readFile('users/' + filename, 'utf8', function(err, result) { return result; }); }); } readDir() .then(getContents) .then(function(fileContents) { // currently returns undefined console.log(fileContents); }); 我如何正确包装getConents()在一个承诺,使我的数组内容不等于undefined?

Promise问题:使用Q.nfcall()调用mongoose.findOne()

我有下面的代码,其中mongoose的findOne方法使用Q.promise包装: // _getById should be returning a Promise var _getById = function(id) { return Q.Promise(function(resolve, reject) { ApplicationModel.findOne({ _id: id, 'metadata.isDisabled': false }, '-metadata', function(err, application) { if (err) { return reject(err); } if (!application) { return reject(new CustomError('Not found', 404)); } resolve(application); }); }); } 我正在尝试使用Q.nfcall方法重构该代码,这是我到目前为止: var _getById = function(id) { var searchOptions = […]

用Promise分页的最好方法是什么?

我和我的朋友正在承诺,我们正在确保在返回到最初的通话之前,我们正在获取所有的数据页面。 有没有更简单的方法来解决这个问题? function getDocuments(startIndex, result, entries) { startIndex = typeof startIndex !== 'undefined' ? startIndex : 0; result = typeof result !== 'undefined' ? result : {}; entries = typeof entries !== 'undefined' ? entries : []; // build our entries set with the result parameter for(var i in result.items) { try { var id […]

使用For循环迭代asynchronous函数(db query,Node.js)

我在我的项目的最后一部分,我试图插入数据从JSON在我的MySQL分贝这里是我的样本数据 {"data": [{"cpos": "g", "cfname": "e", "clname": "ejercito", "cvcount": "4"}, {"cpos": "g", "cfname": "j", "clname": "ejercito", "cvcount": "5"}]} 和示例数据正在parsing我的function(抱歉长function) checkPositionCandidateInsertVote: function(ref, prid, json, callback){ var len = json.data.length; for (var i = 0; i < len; i++) { var fn = (json.data[i].cfname).toLowerCase(); var ln = (json.data[i].clname).toLowerCase(); var c = json.data[i].cvcount; console.log(fn, ' ', c); switch((json.data[i].cpos).toLowerCase()){ […]

如何使用Nodejs中的Promise进行同步http调用

我想使用Q Promises同步进行http呼叫,我有100名学生,我需要每个人从另一个平台获取一些数据,并且这样做是通过Q Promises尝试的,但它似乎并不像是在同步。 如何确保一旦完成parsing响应并插入到mongodb中后,又不会进行另一个调用: 我的代码到目前为止是这样的: var startDate = new Date("February 20, 2016 00:00:00"); //Start from February var from = new Date(startDate).getTime() / 1000; startDate.setDate(startDate.getDate() + 30); var to = new Date(startDate).getTime() / 1000; iterateThruAllStudents(from, to); function iterateThruAllStudents(from, to) { Student.find({status: 'student'}) .populate('user') .exec(function (err, students) { if (err) { throw err; } async.eachSeries(students, function iteratee(student, […]

如何使用Q库在for循环上应用promise?

在这个代码循环运行只有第一次。 请告诉我如何纠正它。 我需要函数get_profile_image()在它开始执行下一个循环的值之前运行。在这个代码循环只运行第一次。 function response(){ var deferred = q.defer(); for(var i=0; i < results.length; i++){ var from_name = results[i].from_name; var request_from = results[i].request_from; var empty = new Array(); friend_requests.push(empty); friend_requests[i].push(from_name); friend_requests[i].push(request_from); var new_array = friend_requests[i]; function get_profile_image(){ var profile_image_defer = q.defer(); var dir = "./public/img/users_directory/"+request_from; fs.readdir(dir, function(err, files) { files.forEach(function(f) { var file = f.substr(0, […]

RxJS具有asynchronous订户function的Observable

我试图做一些感觉应该是直截了当的事情,但certificate令人惊讶的困难。 我有一个订阅RabbitMQ队列的函数。 具体来说,这里是Channel.consume函数: http ://www.squaremobius.net/amqp.node/channel_api.html#channel_consume 它返回一个承诺,这个承诺用一个订阅ID来解决 – 稍后需要取消订阅 – 并且还有一个callback参数来在邮件从队列中取出时调用。 当我想取消订阅队列时,我需要在这里使用Channel.cancel函数取消使用者: http ://www.squaremobius.net/amqp.node/channel_api.html#channel_cancel。 这需要先前返回的订阅ID。 我想把所有这些东西包装在观察者订阅时订阅队列的Observable中,并且当observable退订时取消订阅。 然而,由于调用的“双重asynchronous”性质(我的意思是说,它们同时具有callback和返回承诺),这样做有些困难。 理想情况下,我想写的代码是: return new Rx.Observable(async (subscriber) => { var consumeResult = await channel.consume(queueName, (message) => subscriber.next(message)); return async () => { await channel.cancel(consumeResult.consumerTag); }; }); 然而,这是不可能的,因为这个构造函数不支持asynchronous订阅函数或者拆卸逻辑。 我一直无法找出这一个。 我在这里错过了什么? 为什么这么难? 干杯,Alex