我怎样才能重写我的callback成承诺,使用asynchronous模块? 例如,如果我有以下代码 async.parallel([ function(){ … }, function(){ … } ], callback); 要么 async.waterfall([ function(callback) { callback(null, 'one', 'two'); }, function(arg1, arg2, callback) { // arg1 now equals 'one' and arg2 now equals 'two' callback(null, 'three'); }, function(arg1, callback) { // arg1 now equals 'three' callback(null, 'done'); } ], function (err, result) { // result now […]
我正在通过NodeSchool的learnyounode工作。 在这个问题中,我们提供了三个URL作为前三个命令行参数。 我们必须收集每个URL提供给我们的完整内容,并将其打印到控制台(stdout)。 我们不需要打印出长度,只是将数据打印成string; 每个URL一行。 问题是,我们必须按照与提供给我们的URL相同的顺序将其打印出来,作为命令行参数。 这是我目前的解决scheme尝试,但是,似乎有一个问题。 程序进入一个无限循环,我不知道为什么。 看来Promise中的Promise对象似乎并没有根据相应的response.on('end', …)来更新自己response.on('end', …) 。 任何帮助将非常感激。 var http = require('http'); // Wraps an http GET request. // Three attributes // – data : String // – resolved : boolean // – error : Error function Promise(url) { this.resolved = false; this.error = null; this.data = ''; var self […]
我在一个包含一个对象数组(requestArray)的POST调用的接收结束。 在响应POST之前,我需要依次通过一系列函数传递数组的对象。 我select了asynchronous库来帮助我完成这个任务,但是我很难控制代码的执行stream程。 我正在使用全局数组来存储每个函数(responseArray)的结果。 一些function取决于先前function的结果。 我不想使用async.waterfall(),因为1.我将不得不重写我的代码和2.我可能会遇到相同的早期循环终止问题。 下面是我的代码有问题的代码。 app.post('/test', function(req, res) { var importArray = req.body; var iteration = 0; async.eachSeries(importArray, function(data, callback) { var index = importArray.indexOf(data); var element = data.element; exportArray[index] = []; async.series([ function(callback) { process1(data, index, callback); }, function(callback) { process2(element, index, callback); }, function(callback) { process3(element, index, callback); }], function(err, results) […]
假设我有一个包含多个文件path的数组。 我想要asynchronous删除这些文件。 var files = ['file1.txt', 'file2.txt']; fs.unlink(…, callback()) 我碰到这个解决scheme删除node.js中的几个文件,但我认为它违反了node.js的做法(for循环内的asynchronous函数)。 有没有其他更好的解决scheme呢?
我有一个连接我的本地mongoDB数据库的函数,但是当我尝试把它放在一个for循环中时,连接突然不起作用。 var connectMongo = require("./ConnectToMongoDB"); var insertDocument = require("./InsertDocument"); function spamMongoDBtest(){ process.nextTick(function(){ var max = 500; for(var i = 0; i<max;i++){ setTimeout(function(){ connectMongo(insertDocument); }, 50); } }); } 为什么我得到这个AssertionError: AssertionError:null == {[MongoError:connect ECONNREFUSED] name:'MongoError',message:'connect ECONNREFUSED}} connectMongo(insertDocument); 是否在这个function工作: function spamMongoDB(){ process.nextTick(function(){ setInterval(function(){connectMongo(insertDocument); }, 100); }); }
我想在数组上运行一些数据库查询(使用sails.js),并在查询返回时,做一些事情。 我认为最好的方法是使用for循环,并解决承诺asynchronous,一旦他们都解决了,继续下去。 然而,只有我的数组中的最后一个承诺是解决,它是解决了多次,因为在每个“User.findOne …”然后函数,索引是array.length-1。 我的问题: asynchronous循环中的variables作用域如何工作? 最好的资源来解释这个? 什么是解决我的问题的最好方法? 为什么? 还有其他的模式,我应该使用或不使用? 我对承诺和asynchronousJS相当陌生,所以任何提示都会有帮助! 主要教程我已经检查 https://github.com/kriskowal/q https://github.com/kriskowal/q/wiki/API-Reference https://github.com/bellbind/using-promise-q/ 感谢您的帮助! 我的简化代码: functionWhichReturnsPromise() .then(function(user){ var promises = []; Q.try(function(){ for (var index in array) { var fbid = array[index];// Get fbid from array promises.push(Q.defer().promise); // Add promise to promise array // Find userid from fbid; resolve respective promise when finished […]
您好,我想从我的API中删除HELL的ASYNC 。 我遇到了一个npm软件包,即asynchronous ,它提供了称为asynchronous系列的选项。 所以我尝试在我的API中,我正在做一个正常的注册forms,从用户的电子邮件,名字,姓氏和密码,并插入断点使用节点检查员看到它的工作。 我使用DHC发布了我的数据。 我的API不能给我所需的输出,也没有发布错误。 我的代码如下 function email_verification(callback) { User.find(email, function (err, data) { if (err) { callback(err); } }); } function hashing_password(callback) { bcrypt.genSalt(SALT_WORK_FACTOR, function (err, salt) { if (err) { callback(err); } bcrypt.hash(password, salt, function (err, hash) { if (err) { callback(err); } }); }); } function saving_user(callback) { password = […]
我正在使用第三方库做一些asynchronous操作,但需要尝试捕获错误。 它没有callback,也没有asynchronous函数的承诺。 有没有人知道任何图书馆或方法来捕捉这些错误? 我正在尝试做这样的事情。 var asyncLib = require( 'asyncLib' ); try { asyncLib.doSomething(); } catch( e ) { //I want to catch if doSomething throws some error // But it doesn't because it's using async resources. }
我想要做这样的事情 router.get('/getforecast/:stationShortCode', function(req,res){ var stationShortCode = req.params.stationShortCode; var fs = require('fs'); fs.readFile("data/wx.hourly.txt", "utf8", function(err, data){ if(err) throw err; //do operation on data that generates say resultArray; return resultArray; }); res.send(resultArray); }); 显然, res.send被同步调用,而文件读取asynchronous。 有没有一个聪明的解决办法呢? 我是不是真的通过了res ?
我有一些通过快速path获取数据的代码,如果快速path不可用,我想实现回退到慢速path。 这里还是很新的node.js,所以我不知道如何去做这件事。 这里是我的意思的一个简单的例子: function getThing(callback) { var thang = getThingTheFastWay(); if (!thang) { thang = getThingTheSlowWay(); } if (!thang || !thang.validate()) { return callback(new Error('invalid thang')); } callback(null, thang); } 所以我的目标是在getThingTheSlowWay()asynchronous执行I / O getThingTheSlowWay() 。 这个方法的后半部分需要被提供给getThingTheSlowWay()的callback吗?