第一个函数卡在async.js中

时间:2016-12-07 15:39:54

标签: javascript node.js async.js

我尝试使用async在我的Node.js项目中执行一系列事件,如下所示:

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() s之前是function(callback) s。我以为它正在等待返回一个值,但删除它们并不会改变这种情况。

我做错了什么? (我是Node.js的新手)

感谢您的帮助,

2 个答案:

答案 0 :(得分:1)

请阅读文档。每个函数都应该callback作为参数,并且一旦完成就应该调用callback,从而告诉async它是时候转到下一个函数了。所以你应该有类似的东西:

function(callback) { 
    console.log("calling foo()"); 
    callback();
},

如果其中一个函数出错,请将错误作为第一个参数调用callback。如果您希望仅在执行最后一个函数后执行res.render('my_page', {});,请将其包装在函数中并将其作为第二个参数放到async.series

当然,如果非函数是异步的,您应该考虑不使用async

答案 1 :(得分:1)

首先,我不确定你为什么在这里使用异步,因为你提供给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.series对于连续调用多个异步函数并避免callback hell非常有用。

async

我建议对异步函数和回调进行一些阅读,并考虑是否真的需要{{1}}库。我推荐You Don't Know JS chapter on asynchronous javascript和整个系列:)