Node.js 为什么node js不提供[Mother]函数来异步调用任何函数以及提供的回调
给定Node.js具有异步事件驱动模型, 我希望我能写任何Nodejs函数, e、 g就像通过一个循环一样简单,例如下面的IamLooper, 这可能涉及文件I/O,也可能不涉及文件I/O,然后将循环函数传递给母节点JS函数,例如Invoke,我还将另一个回调函数传递给它,例如下面的happyend。 我的期望是在IamLooper完成后,happyend将由NodeJs提供的函数调用 e、 g: ==> 本质上,Invoke应该对我提供给它的任何两个函数执行相同的操作,这样我们就只有一个回调执行策略的工作模板。 同样,在异步执行调用时,我的程序在完成调用之前会超越调用。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应该对我提供给它的任何两个函数执行相同的操作,这样我们就只有一个回调
是我的期望被误导了吗?任何人都可以在这里给我一些指导。如果您正在寻找在节点中轻松执行回调的现有方法,您应该使用事件发射器: 使用您的代码,它看起来像这样:
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");}