Node.js 为什么node js不提供[Mother]函数来异步调用任何函数以及提供的回调

Node.js 为什么node js不提供[Mother]函数来异步调用任何函数以及提供的回调,node.js,generics,asynchronous,callback,platform,Node.js,Generics,Asynchronous,Callback,Platform,给定Node.js具有异步事件驱动模型, 我希望我能写任何Nodejs函数, e、 g就像通过一个循环一样简单,例如下面的IamLooper, 这可能涉及文件I/O,也可能不涉及文件I/O,然后将循环函数传递给母节点JS函数,例如Invoke,我还将另一个回调函数传递给它,例如下面的happyend。 我的期望是在IamLooper完成后,happyend将由NodeJs提供的函数调用 e、 g: ==> 本质上,Invoke应该对我提供给它的任何两个函数执行相同的操作,这样我们就只有一个回调

给定Node.js具有异步事件驱动模型, 我希望我能写任何Nodejs函数, e、 g就像通过一个循环一样简单,例如下面的IamLooper, 这可能涉及文件I/O,也可能不涉及文件I/O,然后将循环函数传递给母节点JS函数,例如Invoke,我还将另一个回调函数传递给它,例如下面的happyend。 我的期望是在IamLooper完成后,happyend将由NodeJs提供的函数调用

e、 g: ==>

本质上,Invoke应该对我提供给它的任何两个函数执行相同的操作,这样我们就只有一个回调执行策略的工作模板。 同样,在异步执行调用时,我的程序在完成调用之前会超越调用。
是我的期望被误导了吗?任何人都可以在这里给我一些指导。

如果您正在寻找在节点中轻松执行回调的现有方法,您应该使用事件发射器:

使用您的代码,它看起来像这样:

  Invoke(IamLooper(), happyend());
  if(gdata.length > 0) {console.log("looping has started");}
var EventEmitter = require('events').EventEmitter;
var looper = new EventEmitter;

looper.on('invoke', function(data){
    var callFunction = data.callFunction;
    var finishFunction = data.finishFunction;
    var callParameters = data.callParameters;
    var finishParameters = data.finishParameters;
    if(callParameters == null){
        callFunction({callbackPara: finishParameters, callbackFunction: finishFunction});
    }
    else{
        callFunction(callParameters, {callbackParameters: finishParameters, callbackFunction: finishFunction});
    }
});

looper.on('finish', function(data){
    var finishFunction = data.callbackFunction;
    var parameters = data.callbackParameters;
    if(parameters == null){
        finishFunction();
    }
    else{
        finishFunction(parameters);
    }
});


gdata =[];
function IamLooper(g, callback){
    var pi = Array;
    for (var ii = 0 ; ii <4 ; ii ++){  
        pi[ii] = 13* ii;;
        g.push(ii);
    }
    looper.emit('finish', callback);
}

function  happyend() { console.log("looper says done");}
您也可以始终执行正常回调:

gdata =[];
function IamLooper(g, callback){
    var pi = Array;
    for (var ii = 0 ; ii <4 ; ii ++){  
        pi[ii] = 13* ii;;
        g.push(ii);
    }
    callback();
}
IamLooper(gdata, function(){ console.log("looper says done");}

可以说Async.js提供了类似的功能,但是我的主要问题是,如何仅使用node js(即不使用C库调用)从头开始编写nodejs函数,它可以被调用,并在调用时提供回调函数。节点有自己的事件循环,这样它就可以在不干扰其他代码的情况下监视事件;有一个小错误/输入错误?-invoke事件在finishfunction中应该只有不带括号的函数名,如下所示:looper.emit'invoke',{callFunction:IamLooper,finishfunction:happyend,callParameters:gdata,finishParameters:null}。但更重要的是,这是一个很好的模式,它有自己的DSL用于节点js中的回调!Cheers我应该添加异步回调!谢谢你让我知道,我一定是出于习惯才做括号的。我现在就修。祝你的节目好运。
var EventEmitter = require('events').EventEmitter;
var looper = new EventEmitter;

looper.on('invoke', function(data){
    var callFunction = data.callFunction;
    var finishFunction = data.finishFunction;
    var callParameters = data.callParameters;
    var finishParameters = data.finishParameters;
    if(callParameters == null){
        callFunction({callbackPara: finishParameters, callbackFunction: finishFunction});
    }
    else{
        callFunction(callParameters, {callbackParameters: finishParameters, callbackFunction: finishFunction});
    }
});

looper.on('finish', function(data){
    var finishFunction = data.callbackFunction;
    var parameters = data.callbackParameters;
    if(parameters == null){
        finishFunction();
    }
    else{
        finishFunction(parameters);
    }
});


gdata =[];
function IamLooper(g, callback){
    var pi = Array;
    for (var ii = 0 ; ii <4 ; ii ++){  
        pi[ii] = 13* ii;;
        g.push(ii);
    }
    looper.emit('finish', callback);
}

function  happyend() { console.log("looper says done");}
looper.emit('invoke', {callFunction: IamLooper, finishFunction: happyend, callParameters: gdata, finishParameters: null});
gdata =[];
function IamLooper(g, callback){
    var pi = Array;
    for (var ii = 0 ; ii <4 ; ii ++){  
        pi[ii] = 13* ii;;
        g.push(ii);
    }
    callback();
}
IamLooper(gdata, function(){ console.log("looper says done");}