Tag: callback

跟踪完成的JavaScriptcallback没有嵌套function

所以我正在写一个函数,使一堆数据库调用。 我想将它们的结果存储在一个数组中,并在完成之后触发一个callback。 一些伪代码可能会有所帮助: function getStuff (array, callback) { var results = []; var done = 0; for (var i = 0, len = array.length; i < len; i++) { database.fetchOne(array[i], function(result) { results[i] = result; done++; if (done == len) callback(results); }); } } 这很好。 不过,我被告知,在循环中嵌套一个闭包是一个不好的习惯,因为它每次迭代都会定义函数,而且会带来性能上的代价。 其他答案build议将callback移到循环之外: function getStuff (array, callback) { var results = […]

Coffeescript与callback和简化的error handling

我想能够重构这个咖啡代码的error handling: # Do some stuff with 2 levels of asynchronous callbacks and error handling vote = (res, data) -> Case.findOne { caseId: data.id }, (err, mycase) -> if err console.error 'Vote failed' else myvote = new Vote case: mycase._id myvote.save (err) -> if err console.error 'Could not add vote' else console.log 'Success!' 像这样的东西: # […]

我可以用什么来取代嵌套的asynchronouscallback?

比方说,我想发送一封电子邮件,然后更新数据库,这两个行动是asynchronous的。 这是我通常会写的。 send_email(function(err, id){ if(err){ console.log("error"); }else{ update_database(id,function(err, id){ if(err){ console.log("error"); }else{ console.log("success"); } }); } }); 我想用中间件代替它。 var mid = {}; mid.send_email = function(){ return function(next){ send_email(function(err,id){ if(err){ console.log("error"); }else{ next(id); } }); } } mid.update_database = function(){ return function(id,next){ update_database(id,function(err,id){ if(err){ console.log("error"); }else{ next(id); } }); } } mid.success = function(){ return function(id,next){ […]

从NodeJS本地扩展中的不同线程callback

我是nodeJS和节点扩展的新手。 我为节点js写一个本地扩展,它将接收虚函数OnEvent(param1,param2,param3)上的callback。 代码如下: bool MyExt::OnEvent(int eventType, string param1, string param2) { printf("MyExt:: onevent___ \n"); { //// Crashes here, but if I use Locker, it get stuck!!!!!! //Locker l; Local<Value> argv[3] = { Local<Value>::New(Integer::New(1)), Local<Value>::New(String::New("parameter 1")), Local<String>::New(String::New("parameter 2")) }; TryCatch try_catch; //// I need to call this m_EventCallback->Call(Context::GetCurrent()->Global(), 3, argv); if (try_catch.HasCaught()){ printf("Callback is Exception() \n"); […]

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

节点 – 等待循环完成?

当下面的函数完成并提供数组“相册”中项目的最终列表时,我希望它调用另一个函数/对列表执行其他操作。 目前它在函数完成之前发布[],我知道这是因为asynchronous执行,但我认为节点线性读取,因为它是单线程? function getAlbumsTotal(list, params){ for(var i = 0; i<list.length; i++){ api.getArtistAlbums(list[i], params).then(function(data) { for(var alb = 0; alb<data.body.items.length; alb++){ albums.push(data.body.items[alb].id); } }, function(err) { console.error(err); }); } console.log(albums); //do something with the finalized list of albums here }

Node.js Api在Async循环中调用

我很难做出多个API调用,并得到正确的地方返回的结果。 这是我想要实现的:两个循环,嵌套。 外层循环遍历复杂的json对象,并将一些对象的值放入数组调用框中。 内部循环调用api,并将返回的结果放入一个名为bag的数组中。 所以我有箱子和袋子充满数据。 当循环和API呼叫都结束时,我想要访问箱子和包里的数据,然后用它做东西。 我只是不确定最好的方法去同时访问两个数组。 这是我到目前为止,但袋和框当然是空的,因为它们在所有循环和API调用结束之前被调用。 var data = {}//a json object with data; var bag = []; var box = []; async.forEach(data.item, function(item, callback){ async.forEach(item.name, function(name, callback){ callApi(item.name, function(obj){ bag.push(obj); }); callback(); } box.push(item); callback(); }); function callApi(name, callback){ asyncApiCall(url+name, function(err, result){ callback(result); }); } //when all loops and api requests are […]

在Node.js中asynchronous添加到数组中

我对这种types的编程非常新,我从嵌套调用中填充数组时遇到了一些麻烦。 我很确定这需要使用callback来完成,但是我无法绕过它的大脑。 closures也必须在这里发挥作用。 我试图在网上search一个类似的例子,但没有发现太多。 这是我的原始代码。 我尝试了一些不同的方法,但没有把它closures。 TaskSchema.statics.formatAssignee = function(assignees) { var users = []; assignees.forEach(function(uid) { mongoose.model('User').findById(uid, function(err, user) { users.push({ name: user.name.full , id: user.id }); }); }); return users; }

如何从nodejscallback函数返回值?

mturk_ops.block = function(callback){ mongodb.collection(collectionName, function(err, collection){ collection.distinct('workerId',function(err,result){ var result1 = []; console.log(result.length); for(var i=0; i< result.length;i++){ console.log(result[i]); result1[result[i]] = collection.count({ 'workerId':result[i], "judgementStat" : "majority" },function(err, count){ // console.log(count); // globals.push(count); return count ; // console.log( worker + ' majority : ' + count); }); } console.log(result1); }); }); } 在这里,我试图打印'result1',但总是打印数组与未定义的值。 'result1'是一个被分配在callback函数范围之外的数组。

在javascript中使用callback之后解释输出

我是新来的JavaScript,我想了解callback。 我无法理解20为什么会在10之前打印出来。我的理解是对于一个callback函数,例如func1(parameter,func2()) , func2()是callback函数, func1执行“参数“传给func1 。 我的理解是正确的吗? function timePass(length){ console.log("finished after doing timePass for "+length +" seconds") } timePass(10,timePass(20)); 以下输出: 完成时间通过20秒后完成 完成时间通过10秒后完成