第一个函数卡在 async.js
First function gets stuck in async.js
我尝试在 Node.js 项目中使用 async 执行一系列事件,如下所示:
server.js:
var express = require('express');
var async = require('async');
...
app.get('/my_page', function (req, res) {
async.series([
function() { console.log("calling foo()"); },
function() { foo(); },
function() { console.log("foo() done"); },
]);
res.render('my_page', {});
}
但我只得到第一个控制台输出,它卡住了。function()
之前是 function(callback)
。我以为它在等待返回一个值,但删除它们并没有改变这种情况..
我做错了什么? (我是 Node.js 的新手)
感谢您的帮助,
请阅读文档。每个函数都应将 callback
作为参数,并在完成后调用 callback
,从而告诉 async
是时候继续执行下一个函数了。所以你应该有这样的东西:
function(callback) {
console.log("calling foo()");
callback();
},
如果其中一个函数出错,调用 callback
并将错误作为第一个参数。如果你想让 res.render('my_page', {});
只在最后一个函数执行完后才执行,将它包装在一个函数中并将其作为第二个参数传递给 async.series
.
当然,如果没有函数是异步的,你应该考虑不使用 async
。
首先,我不确定你为什么在这里使用异步,因为你提供给 async.series
函数的 none 函数是异步的。
async.series用于连续调用多个异步函数,避免callback hell.
var async = require("async");
function asyncA(callback){
// do something
callback(null, "value-a");
}
function asyncB(callback){
// do something else
callback(null, "value-b");
}
asyncA(function(err, valueA){
console.log(valueA); // "value-a"
asyncB(function(err, valueB){
console.log(valueB); // "value-b"
});
});
async.series([asyncA, asyncB], function(err, results){
console.log(results); // ["value-a", "value-b"]
}
我建议阅读一些有关异步函数和回调的文章,并考虑您是否真的需要 async
库。我推荐 You Don't Know JS chapter on asynchronous javascript 和整个系列:)
我尝试在 Node.js 项目中使用 async 执行一系列事件,如下所示:
server.js:
var express = require('express');
var async = require('async');
...
app.get('/my_page', function (req, res) {
async.series([
function() { console.log("calling foo()"); },
function() { foo(); },
function() { console.log("foo() done"); },
]);
res.render('my_page', {});
}
但我只得到第一个控制台输出,它卡住了。function()
之前是 function(callback)
。我以为它在等待返回一个值,但删除它们并没有改变这种情况..
我做错了什么? (我是 Node.js 的新手)
感谢您的帮助,
请阅读文档。每个函数都应将 callback
作为参数,并在完成后调用 callback
,从而告诉 async
是时候继续执行下一个函数了。所以你应该有这样的东西:
function(callback) {
console.log("calling foo()");
callback();
},
如果其中一个函数出错,调用 callback
并将错误作为第一个参数。如果你想让 res.render('my_page', {});
只在最后一个函数执行完后才执行,将它包装在一个函数中并将其作为第二个参数传递给 async.series
.
当然,如果没有函数是异步的,你应该考虑不使用 async
。
首先,我不确定你为什么在这里使用异步,因为你提供给 async.series
函数的 none 函数是异步的。
async.series用于连续调用多个异步函数,避免callback hell.
var async = require("async");
function asyncA(callback){
// do something
callback(null, "value-a");
}
function asyncB(callback){
// do something else
callback(null, "value-b");
}
asyncA(function(err, valueA){
console.log(valueA); // "value-a"
asyncB(function(err, valueB){
console.log(valueB); // "value-b"
});
});
async.series([asyncA, asyncB], function(err, results){
console.log(results); // ["value-a", "value-b"]
}
我建议阅读一些有关异步函数和回调的文章,并考虑您是否真的需要 async
库。我推荐 You Don't Know JS chapter on asynchronous javascript 和整个系列:)