Tag: q

如何从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 = […]

如何使用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.all在forEach之前运行

我试图做一个承诺函数,读取电子邮件数组,然后find用户ID并将其推送到另一个数组。 问题是我的Q.all函数在_.forEach完成之前运行。 一探究竟: var deferred = Q.defer(), promises = [], _ = require('lodash'); _.forEach(users, function(user) { User.findOne({ username: user }, function(err, member) { if (err) console.log(err); var memberId = member._id; promises.push(members.push(memberId)); }); }); Q.all(promises) .then(function(promises) { deferred.resolve(promises); console.log(promises); // This always returns -> [] }) .catch(function(err) { deferred.reject(err); }); return deferred.promise; 所以每次我尝试console.log我承诺的数组,我得到一个空的数组。 我什至试图使用JavaScript本地forEachfunction,但它没有工作。 是否每个问题或Q.all是这种情况下适当的function? 提前致谢。 […]

在条件逻辑的基础上调用Q承诺

以下是我的情况 if abc is true call async func1, func2 else call async func1 function test(): Q.Promise<boolean> { if(abc) Q.all([func1,func2]) else Q.all([func1]) //if failed throw reject reason all the way in the chain } 如图所示,它可以使用if和else子句完成,有没有更好的方法来有条件地调用promise? 如何抛出error from any one of the promises ?

nodejs在asynchronous更新数组时遇到麻烦

我有一个nodejs的asynchronous问题。 希望您能够帮助我。 exports.DeviceInfo = function(req, res, next) { var nets = req.body.networks; db.collection("device", function(err, deviceConf) { var detected_beacons = []; if (!err) { for (var i = 0; i < nets.length; i++) { deviceConf .find({ "data.number": nets[i] }) .toArray(function(errFind, saver) { if (!errFind && saver) { saver.forEach(function(disp) { var detected = {}; detected.address = disp.address; […]

节点; Q承诺延期

以下是一些简单的问题,这些问题基于我在下面的节点中运行的示例中的行为: Q('THING 1').then(console.log.bind(console)); console.log('THING 2'); 这个输出是: > "THING 2" > "THING 1" 问题: 1)为什么Q在执行callback之前等待立即知道的值? 为什么Q不够聪明,让第一行在第二行之前同步发出输出? 2)输出"THING 2"和"THING 1"之间的时间差是多less? 这是一个单一的过程? 3)对承诺中包含的价值观是否会有性能问题? 例如, Q(Q(Q("THING 1")))asynchronous地等待3倍的时间来完成,即使它可以被有效地同步解决?

在angualarJs或node.js中替代q.all

是否有任何替代q.all因为callback 只有当所有http调用成功时, q.all().then()才会被调用。 即使一个http调用失败,也会进入.catch部分。 有什么办法可以使它进入到q.all().then()部分,即使很less的http调用失败?