第一个函数卡在 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 和整个系列:)