Tag: asynccallback

node.js中的callback函数的作用域

我有以下代码: exported.removeAllWatchesForUser = function (projectKey, userObj, done) { console.log('done='+done); // Function is recognized // Get list of all issues & remove the user from watchers list exported.getIssueList(projectKey, function(err, response, done){ console.log('done='+done); // callback is not recognize but is 'undefined }); }; 我的问题是callback函数'done'在第2行中被识别,但在getIssueListcallback中的第6行中是'undefined'。 我如何使它在这个函数中可用,以便我可以传递callback到连续的asynchronous方法?

如何将多个callback函数呈现给nodejs中的视图

我已经创build了两个函数,从mongodb中获取值,然后我想将这些函数渲染到视图,但我可以一次只分配函数,但不能同时指定这两个函数在视图中渲染。 我想知道最好的技术来做到以下几点。 其实我想通过以下url显示类别的书籍 http://localhost:3000/category/catid/56696ddeef90d5400b604361 这将从所提到的类别和侧边栏中的所有书籍类别中获取所有图书。 我的代码如下 function get_books_details(callback){ //console.log(get_cat_id); //res.render('pages/category', { title: 'Express','get_cat':get_cat_id}); var get_books=[]; var array = []; /* query mongodb start */ MongoClient.connect(url, function (err, db) { if (err) { console.log('Unable to connect to the mongoDB server. Error:', err); } else { db.collection('book', function(err, collection) { collection.find().toArray(function(err,results) { results.forEach(function(item) { array.push(item); }); callback(array); […]

For循环在asynchronous编程

userId = ['123', '456']; userName = ['aaa', 'bbb']; for (var j = 0; j < userId.length; j++) { Instagram.otherUserMedia(userId[j], function (response) { $('#otherInfo').append('<h2>' + userName[j] + '</h2>'); for(var i = 0; i < response.data.length; i++) { $('#otherInfo').append('<img src="' + response.data[i].images.thumbnail.url + '" />'); } }); } 在这个代码片段中,我需要显示相应的userName与来自response的输出图像。 但是当我执行这个代码时, j值递增,直到userId.length ,然后进入callback。 所以,当我想显示userName[j]它说, j是undefined因为它循环了userId每个值。 我想为每个userId的response获取相应的userName 。

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 […]