在NodeJS中,如何从虚函数中退出父函数

时间:2016-04-05 19:54:52

标签: javascript node.js node-async

我有类似以下的内容

var async = require(async)

function start () {
    async.series(
        [
            function (callback) {
                // do something
                callback(null, "Done doing something")
                return // EXIT start() NOT JUST THIS VIRTUAL FUNCTION
            },
            function (callback) {
                // do something else if the first thing succeeded
                callback(null, "Done doing something else")
            }
        ],
        function (err,result) {
            if (err) {
                console.log(err)
            }
        }
    )

    console.log("All done!")
}

// Start doing stuff
start()

是否可以根据包含的虚拟函数中的某些条件退出函数start(),其中我放置了注释" EXIT start()不仅仅是这个虚拟函数"

2 个答案:

答案 0 :(得分:0)

async文档(此处:https://github.com/caolan/async#seriestasks-callback

  

async.series   在系列中运行任务集合中的函数,每个函数都在运行   一旦上一个功能完成。 If any functions in the series pass an error to its callback, no more functions are run,和   立即使用错误值调用回调。除此以外,   任务完成后,回调会收到一系列结果。

所以,而不是打电话:

return // EXIT start() NOT JUST THIS VIRTUAL FUNCTION

您可以致电:

callback("stop", null)

答案 1 :(得分:0)

简而言之,您可以提前退出任务系列。 async使用error-first callbacks,这是Node.js中的基本异步回调结构。使用Node.js了解异步开发的另一个资源是从RisingStack看到这个伟大的blog post

来自async的回调返回到async.series完成时调用的最终回调(如果提供),此回调是可选的。如果系列中的任务在第一个参数(错误参数)中返回值不是null的回调,则series将中断并返回到最终的回调处理程序。

async.series(
    [
        function (callback) {

            // If some condition is met, exit series with an error
            if (someCondition)
                return callback('exit start', null);

            return callback(null, 'Done doing something');
        },
        function (callback) {
            if (someCondition)
              return callback('error', null);

            // do something else if the first thing succeeded
            return callback(null, "Done doing something else")
        }
    ],
    function (err,result) {
        // Handle error returned from a series callback if one occurred      
        if (err) {
            console.log(err)
        }
    }
)