Articles of asynccallback

NodeJS如何在控制器中组织callback

我是新来NodeJS和来自PHP环境我想弄清楚如何使用多个callback。 我确实了解callback的基础知识,我认为在编写模块时确实很灵敏。 我的问题是什么时候使用这些模块如何组织所有的callback。 下面是我的实现一个请求重置密码控制器方法(我正在使用SailsJS)。 这是我的代码的初稿。 主要是testing一个组织callback的方法。 你们如何看待这种结构? 有没有更好的办法呢? var _ = require('lodash'); var moment = require('moment'); var mailer = require("../../services/Mailer"); var crypto = require('../../services/crypto'); var forms = require("forms"), fields = forms.fields, validators = forms.validators; module.exports = { // Request reset user password: submit form and send email request_process : function(req, res, next) { var form […]

处理嵌套的callback函数

我需要一些帮助构build我的函数w /callback。 问题:我的逻辑performance出我的想象吗? app = getApp(function(val1, val2){ helperFunction(val3, function(val4, val5, callbackTwo){ //…logic var val6 = …. callbackTwo(val6) }, function(val6){ //logic }); }; function helperFunction(val3, callback, callbackTwo){ //logic callback(val4, val5, callbackTwo); } 基本上是有效的。 然而根据我的第一个匿名callback函数的逻辑,是否有任何机会,我的callbackTwo函数将被触发之前,分配的val6 ?

NodeJSasynchronous – 传递参数给callback

我正在使用NodeJS设置一个刮板,我很难找出使用async.parallel传递数据的正确方法。 这里是批处理函数,它接收zip_results对象内的数组中的邮政编码列表。 我正在尝试将数组asyncTasks设置为由async运行的函数数组。 我想为每个邮政编码调用的函数是Scraper.batchOne,我想通过它一个邮政编码和工作版本。 现在,函数立即被调用。 我试图在一个匿名函数中包装调用Scraper.batchOne ,但是失去了索引variablesi的范围,并且总是以未定义的值发送。 怎样才能使函数传递给数组,以及一些参数? // zip_results: {job_version: int, zip_codes: []} Scraper.batch = function (zip_results) { //tasks – An array or object containing functions to run, each function //is passed a callback(err, result) it must call on completion with an //error err (which can be null) and an optional result value. var […]

在“请求”中调用模块的本地函数作为callback

在我的主要代码中,我执行以下操作: var module = require('./module') module.FooA(module.FooB); module.js包含下面的代码: var request = require('request'); //using of npm "request" exports.FooB = function(data){ /*operations on data here*/ }; exports.FooA = function(callback){ var url = some_link; request(url, function (error, response, body) { if (!error && response.statusCode == 200) { callback(body); }; }); }; 问题是显然,即使条件满足, callback(body)也不运行。 var result = request(url)后跟exports.FooB(result)做这个工作,但据我所见,显然不会像callback一样行事,会产生麻烦。 在这种情况下定义callback函数的正确方法是什么? 我是否需要,或者它实际上是同步的,我错过了注意到它?

node.js中的async.js瀑布:如何使用bind和这个?

我正在学习来自具有有限JavaScript级别的PHP背景的node.js。 我想我现在已经解决了asynchronous方法所隐含的思维方式的变化。 我喜欢它。 但是,和我之前的很多人一样,我很快理解了“厄运金字塔”的具体含义。 所以我build立这些小的“虚拟”路线和视图,以了解如何正确使用Async.js。 我只花了最后5个小时写下面的代码(当然重写了几十次)。 它的工作原理,但我想知道如何进一步,使这个代码更简单(不详细,更容易阅读和维护)。 我在网上发现了很多资源,特别是在这里,但总是通过一些信息在这里和那里。 我猜在这一点上,我应该使用“绑定”和“this”与async.apply使缩短瀑布调用的最后2个函数。 问题是获取对象“db”定义,所以我可以使用它的“收集”方法(第二个function)。 我真的search了一个谷歌的例子,但是你不能直截了当地find“asynchronous瀑布绑定”(以及我试过的许多关键字变体)的例子。 当然有答案,但似乎没有什么与这个特殊问题有关…矿石,很可能,我还没有理解他们。 有人可以帮我吗? 我会很感激。 app.get('/dummy', function(req, res) { var MongoClient = require('mongodb').MongoClient; async.waterfall( [ async.apply(MongoClient.connect, 'mongodb://localhost:27017/mybdd'), function(db, callback) { db.collection('myCollection', callback); }, function(collection, callback) { collection.find().sort({"key":-1}).limit(10).toArray(callback); } ], function(err, results) { if (err) console.log('Error :', err); else { res.render('dummy.jade', { title:'dummy', results: results} ); } […]

Node.jsasynchronouseachLimit如何在这种情况下工作?

我写了一个小async脚本来批量插入大量的JSON文件到MongoDB分片集群中。 这是我第一次使用这个模块(而且我还在学习Node.js)。 我不知道我是否做对了。 该代码是瀑布(1)的最后一部分:以前的函数结束与db , coll和files属性的对象。 files数组包含数百个文件path,并且应用于数组的每个元素的函数又是一个瀑布(2)。 瀑布(2)由以下内容组成:读取,parsing,插入。 当这个瀑布结束时(3)我调用complete完成数组中单个项目的处理,传递错误(如果有的话)。 到目前为止这么好,对吗? 我不明白的是在async.eachLimitcallback(4)内发生了什么。 从文档: 在所有迭代器函数完成之后调用的callback,或发生错误。 也就是说,当所有函数完成后, next()调用(5)结束脚本。 但是,当按照文档发生单个错误时,会调用相同的callback函数(4)。 这是我的脚本停止时发生单个文件的失败。 我怎样才能避免这一点? async.waterfall([ // 1 // … function (obj, next) { async.eachLimit(obj.files, 1000, function (file, complete) { async.waterfall([ // 2 function (next) { fs.readFile(file, {}, function (err, data) { next(err, data); }); }, function (data, next) { // Parse […]

了解module.exports与callback

我有一种情况,我正在创build一个只有在asynchronous操作完成时才返回的节点模块。 一种方法(如下所示)是为module.exports分配一个带有callback参数的函数。 在函数内部,您将返回callback。 下面是我描述的一个例子,完成了callback: // module called test.js module.exports = function(done) { // do something asynchronous here process.nextTick(function() { done(); // call done when the asynchronous thing is complete… } } 我挂断电话的地方在于callback的确在执行,考虑到我没有把它定义在任何地方。 例如,在香草JavaScript中,我可以通过完成参数,然后在函数内调用它,只要我在调用中创buildcallback函数。 function testAsyncCb(msg, done) { console.log(msg); setTimeout( function() { done(); }, 1000); console.log("last line in code"); } testAsyncCb("testing", function(){ console.log("done"); }); // invocation […]

如何访问fscallback方法中的文件的名称?

如何从callback中访问fs.read , fs.stat …方法的参数? 例如,如果我想根据其大小处理文件(coffeeScript)代码片段 #assuming test1.txt exists filename = "./test1.txt" fs.stat filename, (err, stats) -> data = filename:filename,size:stats.size console.log data #further process filename based on size filename = "./test2.txt" 版画 { filename: './test2.txt', size: 5 } 因为文件名被设置为“./test2.txt”。 如果我使用fs.statcallback中的filenamevariables处理/读取文件,它将使用不是打算的test2.txt 。 我期望在callback中看到的是 { filename: './test1.txt', size: 5 }

无法使用mysql和节点js返回select查询值

我在节点js新,现在我想设置一个返回值select查询在mysql中使用节点js ….我正在使用node-mysql包… 示例代码 var mysql = require('mysql'); var connection = mysql.createConnection({ host : "localhost", user : "root", password: "root123", database: "testdb" }); var retValue = undefined; var query = connection.query('SELECT * FROM tblData;'); query .on('error', function(err) { // Handle error, an 'end' event will be emitted after this as well }) .on('fields', function(fields) { // […]

从另一个lambdaasynchronous调用aws lambda

我需要从另一个lambdaasynchronous调用aws lambda。 我有一个同步调用的工作代码。 exports.handler = (event, context, callback) => { var aws = require('aws-sdk'); var lambda = new aws.Lambda({ region: 'myregion' //change to your region }); console.log("lambda invoke started"); lambda.invoke({ FunctionName: 'testLambda', Payload: JSON.stringify(event, null, 2) // pass params }, function (error, data) { if (error) { console.log("error"); callback(null, 'hello world'); } else { console.log("lambda […]