Articles of async.js

async.auto:第一个错误后停止整个链

我的印象是, async.auto的行为是,如果其中一个任务返回一个err ,全局callback将被调用这个错误, 所有后续的任务将不会执行。 毕竟,他们为什么呢? 全局callback已被调用,所以错误已被报告。 事实certificate,只有依赖于错误任务的任务才会运行,其余部分将会运行。 'use strict'; var async = require('async'); async.auto({ downloadAudio: function (callback) { console.log("downloading audio…"); setTimeout(function () { console.log("downloaded audio."); callback(); }, 10000); }, downloadScript: function (callback) { console.log("downloading script…"); setTimeout(function () { return callback(new Error("ERROR downloading script!")); }, 1000); }, preprocessAudio: ['downloadAudio', function (callback) { console.log("preprocessing audio…"); setTimeout(function () […]

error handling与嵌套callbackasynchronous瀑布

我在async.waterfall( [] , function() )使用async.parallel。 代码如下: async.waterfall( [ function first(callback) { //some processing callback(); }, function second(result, callback) { //Here i query the db model.findAll() .then(function(success) { async.parallel( [array_of_functions], function done(err, result) { if (err) { callback(err); } } ) }) .catch(function(err) { callback(err); }) } ], function done(err, result) { if (err) { throw […]

在Node.js中使用MongoDB进行扩展,我应该什么时候一次查询所有的ID,并行查询每个ID?

可以说我有一个处理N个用户的脚本。 脚本可以看两种方法之一,假设资源充足,速度会更快吗? 我可以使用Promise.all或async.parallel 。 选项1 function processUsers(userIds) { monog.find({_id: { $in: userIds }, (userDocs) => { const tasks = userDocs.map((userDoc) => processUser(userDoc)) async.parallel(tasks, (err, results) => console.log('finished')) }); } 选项2 function processUsers(userIds) { const tasks = userIds.map((userId) => { mongo.findOne({_id: userId}, (err, userDoc) => { processUser(userDoc); }) }) async.parallel(tasks, (err, results) => console.log('finished')) }

将数组传递给asynchronous库eachSeries – 期望Dictionary <{}>'

我有以下TypeScript代码: const allDescribeBlocks: Array<ITestSuite> = suman.allDescribeBlocks; async.eachSeries(allDescribeBlocks, function (block: ITestSuite, cb: Function) { //…. }, cb); 这将会发出警告: typesITestSuite []的参数不可分配给typesDictionary <{}>的参数。 索引签名在ITestSuite []中缺失。 怎么修? 这是确切的警告:

在Node.js的另一个文件中同步使用返回值

我通过一个帮助文件连接来自一个已定义用户的tweets,并尝试在我的server.js中检索它,但是那里的str值仍然是未定义的(并且这条线首先被执行),然后我的帮助者的console.log用正确的价值。 输出: GET / login / twitter / callback 302 618.242 ms – 0 服务器中的连接Tweets:未定义 助手级联推文:testing鸣叫3 #TestTweettesting鸣叫2testing鸣叫1 任何人都可以帮助我应该使用什么控制stream来调用twitterHelper.getTweets函数来获取服务器中返回的str? 谢谢! Server.js app.get('/login/twitter/callback', passport.authenticate('twitter', {failureRedirect: "/login"}, function(req, res) { // auth success async.waterfall ([ function(callback) { callback(null, twitterHelper.getTweets(user)); }, function(str, callback) { console.log("Concatenated Tweets in Server: " + str); callback(null); } ], function(err) { if(err) console.log("Error: " […]

MEAN 2多租户(多个集合保存相互参考)

所以,虽然学习JS,特别是MEAN 2堆栈,我试图build立一个基本的多租户应用程序。 我build立快速注册路线,我试图达到的stream量将是: 注册公司名称,电子邮件和密码。 信息会去保存一个新的租户,然后返回新租户的_id,然后使用这个新的ID,电子邮件和密码来保存一个新的用户。 最接近的是: router.post('/', function (req, res, next) { var tenant = new Tenant({ name: req.body.name }); var newTenant; tenant.save(function (err, tenant) { if (err) { return res.status(500).json({ title: 'An error has occured', error: err }); } res.status(201).json({ message: 'Tenant created', obj: tenant }); return(tenant._id); newTenant = tenant; }); Tenant.findById(newTenant._id, function(err, tenant) […]

Mongooseasynchronous调用内循环与asynchronous库

我刚开始使用nodejs / mongoose,我想我有一个经典的asynchronous问题。 有人可以指导我如何解决这个asynchronous问题? 我有这个函数“getAreasRoot”和里面我有一个循环来填充另一个asynchronous函数的结果的儿童。 我怎样才能解决它与asynchronous库? areaSchema.statics.getAreasRoot = function(cb: any) { let self = this; return self.model("Area").find({ parentId: null }, function(err: any, docs: any){ docs.forEach(function(doc: any){ doc.name = "Hi " + doc.name; doc.children = self.model("Area").getAreasChildren(doc._id, function(err: any, docs: any){}); }) cb(err, docs); }); }; areaSchema.statics.getAreasChildren = function(id: any, cb: any) { return this.model("Area").find({ parentId: null […]

使用async.waterfall

我正在使用node.js和asynchronous包。 这是我有的代码: async.waterfall( [ function(callback) { var data = getSomeData(); callback(null, data); }, function(data, callback) { someFunctionThatNeedsData(data); callback(null, 'done'); } ], function(err, result) { } ); getSomeData具有一个asynchronousHTTP请求,用于从Web服务获取一些数据。 我想等待,直到我得到一个响应,然后返回该数据,并将其传递给一些someFunctionThatNeedsData 。 我期望的是getSomeData – 包括其内部的callback – 将不得不完成,然后再调用someFunctionThatNeedsData 。 问题在于,尽pipe在这里使用了waterfall函数,但data到达someFunctionThatNeedsData函数所需要的data还是未定义的。 另外,从console.log我可以看到getSomeData的结束是在getSomeData内部的callback甚至开始之前达到的。 我错误地使用了waterfall ,还是这里不是正确的工具? 如果它不对,我可以用什么来达到预期的效果? 或者我必须辞职,以深嵌套callback(未来的工作,我会),并不得不通过提取内联代码到命名函数缓解它?

async.each在完成所有迭代后callback

现在我已经一头撞在这段代码上几个小时了。 而且我之前多次使用过“ async.each ”。 可能是代码只是需要一组不同的眼睛来工作。 这是代码和问题。 async.each(process.argv, function(file, callback){ runFile(file, callback); }, function(err){ console.log("Here is the error!:" + err +"files to unstage: " + filesToUnstage) if(err) console.log(err); else{ if(filesToUnstage) { __unstage(); } } }); RUNFILE: function runFile(filename, callback) { // Do a bunch of stuff …. __parseOutput(output, callback); } __parseOutput: function __parseOutput(output, callback){ //Do some […]

在Async瀑布中为每个具有Mysql连接池的函数

我已经按照这个教程 ,现在我正在build立一个连接到一个Mysql数据库与一个工作连接池的Express js应用程序; 然后我使用Async.js在我的服务器中的瀑布指令。 我只是重构我的代码避免callback地狱。 我很困惑,因为我有一个嵌套的forEach函数(callback地狱的情况),它完全获得我的MySql连接的工作代码,现在没有任何工作。 问题:收到GET请求后,直到“Action Two”打印。 这是我目前的MWE : apiRoutes.get('/endpoint', function(req, res) { async.waterfall([ function actionOne(callback){ connection.acquire(function(err, con){ con.query( myQuery , function(err, result){ con.release(); if(err){ console.log(err); callback(err); } else { console.log("Action One Success"); callback(null, result); } }); }); }, function actionTwo(list, callback){ console.log("Action Two"); var arr = []; list.forEach(function(item, index, array){ item.arr = []; […]