Tag: promise

我怎样才能用“Q`与mongoose绑定`save`方法

说我在User.js有以下模式 var mongoose = require('mongoose'); var Q = require('q'); var userSchema = new mongoose.Schema({ phone: { type: Number, require: true, index: { unique: true } } }); module.exports = mongoose.model('User', userSchema); module.exports.findOne = Q.nfbind(module.exports.findOne.bind(module.exports)); module.exports.find = Q.nfbind(module.exports.find.bind(module.exports)); 另一个文件testuser.js var mongoose = require('mongoose'); var Q = require('q'); var User = require('../User'); var connectionStr = "mongodb://localhost:27017/user-model-test"; mongoose.connect(connectionStr, […]

节点js不解决承诺的数组

我试图执行几个asynchronous请求,并试图使用承诺获得输出。 如果我有多个请求排队Q.all(promises).then()函数似乎不工作。 对于单个请求,承诺全部解决。 示例代码在这里。 var request = require('request'); var Q = require('q'); var sites = ['http://www.google.com', 'http://www.example.com', 'http://www.yahoo.com']; // var sites = ['http://www.google.com'] var promises = []; for (site in sites) { var deferred = Q.defer(); promises.push(deferred.promise); options = {url: sites[site]}; request(options, function (error, msg, body) { if (error) { deferred.reject(); } deferred.resolve(); }); } […]

一旦CSV完成阅读,如何解决承诺?

我正在使用这里find的'fast-csv'模块( https://www.npmjs.org/package/fast-csv ),但是我愿意改变它。 我试过promised-csv( https://www.npmjs.org/package/promised-csv ),但是我无法把头绕在里面。 我也使用q( https://www.npmjs.org/package/q )。 这是一个长期承诺的function链的一部分,所以我只会打扰你这个和那个之后立即。 var csvRows = []; var parseCSV = function(){ var d = q.defer(); csv .fromPath(school+'_export1.csv') .on('data', function(data){ csvRows.push(data); }) .on('end', function(){ done = true; d.resolve(); }); return d.promise; } var updateSchedule = function(){ var d = q.defer(); console.log(csvRows); // csvRows.forEach(function(row){ // console.log(row); // connection.query('INSERT INTO schedule […]

我如何将Q promise与MongoDB cursor.each()一起使用?

我的代码的要点如下: function checkWinRate(array){ var winCount = 0; var totalCount = 0; db.collection.find(query).each( function(foo){ if (condition){ winCount++; } totalCount++; db.close(); }); return winCount/totalCount; } 这里显而易见的问题是,在return语句中,winCount和totalCount仍然等于0.我正在尝试使用Q promise库来整理一系列事件,但我不确定如何实现它。 有人可以告诉我怎么处理Q? 编辑 ID:10T错误在这里。 我忘了我正在使用和尚包装。 对于那些想知道我做了什么来解决这个问题的人,僧侣有一个很好的方式来处理承诺,方法如下: function checkWinRate(array){ var winCount = 0; var totalCount = 0; var promise = db.collection.find(query).each( function(foo){ if (condition){ winCount++; } totalCount++; db.close(); }); promise.success(function(){ return winCount/totalCount); […]

Javascript和承诺与Q – 封闭的承诺问题

我使用Node.js和Q编写服务器端的asynchronous代码。 我对诺言是新的(对于asynchronous编程我一般都是新手),而且我遇到了一些麻烦,我不能通过查看Q文档来解决这个问题。 这里是我的代码(这是coffeescript – 让我知道,如果你想看到的JavaScript): templates = {} promises = [] for type in ['html', 'text'] promises.push Q.nfcall(fs.readFile , "./email_templates/#{type}.ejs" , 'utf8' ).then (data)-> # the problem is right here – by the time # this function is called, we are done # iterating through the loop, and the value # of type is incorrect […]

Q.jsvariables并行传递

在实现承诺时得到了这样的代码: var MongoClient = require('mongodb').MongoClient MongoClient.connect(db_uri, function(err, db) { if(err) throw err; var ccoll = db.collection('cdata'); app.locals.dbstore = db; } var json= {} //Auth is a wrapped mongo collection var Auth = app.locals.Auth; var coll = app.locals.dbstore.collection('data'); var ucoll = app.locals.dbstore.collection('udata'); var ccoll = app.locals.dbstore.collection('cdata'); var Q = require('q'); //testing with certain _id in database […]

调用Node.js中的http.get请求数组

我有一个URL的数组,我使用for循环来调用http.get请求。 由于这是一个asynchronous过程,所以我希望在所有请求都返回后调用完成。 这是我目前的尝试: grunt.registerTask('verify', function() { var done = this.async(); var promises = []; var urlPrefix = 'http://example.com/'; for(var i = 0; i < deployableFiles.length; i++) { (function(i) { var deferred = Q.defer(); promises.push(deferred); var file = deployableFiles[i]; var path = file.filetype + '/' + getVersionedFileName(file.basename, file.filetype); http.get(urlPrefix + path, function(res) { deferred.resolve(); if(res.statusCode === […]

承诺与mongoose和es6不按预期工作

我有下面的代码创build一个承诺数组来保存一些数字,然后它产生的承诺(使用共库),并打印出结果。 但是,我不明白的是,当它打印输出时,会打印相同的logging10次。 这里是代码: 'use strict' const Promise = require('bluebird'); const co = require('co'); const _ = require('lodash'); const mongoose = require('mongoose'); // plug in the bluebird promise library for mongoose mongoose.Promise = Promise; mongoose.connect('mongodb://localhost:27017/nodejs_testing'); const numSchema = new mongoose.Schema({ num: { type: Number, required: true } }); const Num = mongoose.model('Num', numSchema); let promises = […]

在承诺链中容纳Q.all

我发誓Q是因为它的简单性,所以我可能没有做太多的研究来检查其他'当时'的实现。 但是我用了很多Q! 我有一个“当时”的承诺链,我想在它的中间解决一批“承诺”,按顺序进行其他的操作; 所以很明显我应该使用Q.all。 但我在这里卡住了 要么Q做错了,要么我做错了。 以下是两个假设的asynchronous操作 var f=function(delay){ return Q.delay(delay).then(function(){ console.log("returning delayed",delay) return delay }) } f2=function(delay){ var defer=Q.defer() setTimeout(function(){ console.log("returning timedout",delay) return delay },delay) return defer.promise } 这是承诺链 Q('begin') .then(console.log) .then(Q.all([100,200,300,400].map(f))) .then(function(){ console.log("Finally",arguments) }).done() 这是我希望的输出 begin returning delayed 100 returning delayed 200 returning delayed 300 returning delayed 400 Finally { '0': undefined } […]

如何处理承诺,因为他们解决?

目前,这个代码打印出一个零,因为数组中的第一个承诺立即解决。 const promises = []; const promiser = (number) => new Promise((resolve, reject) => window.setTimeout(() => resolve(number), number * 100)); for (let index = 0; index < 10; index++) { const promise = promiser(index); promises.push(promise); } Promise.race(promises).then(r => console.debug(r)); 我期待这样做,以便一旦最快的承诺解决,它是从promises数组中删除和一个新的Promise.race调用剩下的承诺,重复,直到没有承诺离开。 由于Promise.race返回的是承诺的结果,而不是解决的承诺本身,但是,我无法确定哪个承诺是解决的,我不知道哪一个从数组中删除。 有没有办法知道这个? 我想我可以用某种相关键和结果返回一个复杂的对象,但这似乎很奇怪。 我希望Promise.racecallback的第二个参数将是承诺的索引,但事实并非如此,因为then只是另一个承诺的一个,所以它怎么会知道它应该无论如何返回一些索引。 你能想出更好的办法吗? 而且,我在第一race执行了所有的承诺,但是这对后来的race来说应该不成问题,对吗? 如果在接下来的race之前另一个承诺解决了,那么应该把它退还,没问题,对吗? 如果同时有多个承诺解决,它只会返回第一个(按照数组顺序或按照分辨率顺序?),然后下一个race将返回第二个,依此类推…对吗? 顺便说一句,我也尽pipe我可以走arrays,并删除已经isResolved承诺,但这不是一个真实的事情。 即使是这样,但是对于race诉求之间的多重承诺解决的情况来说,这完全是race 。