javascript中的大量嵌套函数
我一直在阅读JavaScript中的异步函数,发现我不太理解下面的代码 这是:javascript中的大量嵌套函数,javascript,callback,Javascript,Callback,我一直在阅读JavaScript中的异步函数,发现我不太理解下面的代码 这是: doSomething(function(result) { doSomethingElse(result, function(newResult) { doThirdThing(newResult, function(finalResult) { console.log('Got the final result: ' + finalResult); }, failureCallba
doSomething(function(result) {
doSomethingElse(result, function(newResult) {
doThirdThing(newResult, function(finalResult) {
console.log('Got the final result: ' + finalResult);
}, failureCallback);
}, failureCallback);
}, failureCallback);
我不明白的是这些结果从何而来。它们是回调。回调仅仅是一个函数,它作为一个参数传递给另一个函数,用于处理接收回调作为参数的函数所执行的某些操作的结果。你可以自己写。一个简单的例子:
函数callMe(回调){
设加法=2+2;
回收(添加);
}
callMe(函数(结果){
控制台日志(结果);
});代码>Javascript是一种单线程语言,当异步代码块以非阻塞方式结束时,回调被用作控制执行流的一种方法。回调通常只是传递到异步函数(函数A)中的另一个函数(函数B),在函数A完成时运行。即
doSomething(func) {
// do async code.
// call func
// func()
}
您还没有发布这些函数的内部块,但我认为我们都可以安全地假设“result”是服务器返回回调函数的响应,即
doSomething(callback) {
//fetch or ajax or whatever to server store response.
//pass response BACK to callback function
callback(response)
}
JavaScript的美妙之处在于,您已经拥有了测试它所需的一切
您发布的代码引用了4个函数(不要忘记失败回调):
这些函数没有编写。那么,让我们写下它们:
var failureCallback=function(){
log(“出了点问题”);
}
var doSomething=函数(回调){
setTimeout(函数(){
var result=Date.now();//创建一些数据,这些数据将在每次调用函数时更改
回调(结果);
}, 500);
}
var doSomethingElse=函数(res,回调){
setTimeout(函数(){
var result=[res];//此函数真正做的就是将第一个参数放入数组中
回调(结果);
}, 500);
}
函数doThirdThing(res,回调){
setTimeout(函数(){
res.push(Math.PI);//res应该是一个数组,所以我们可以向其中添加内容。
var结果=res;
callback(result);//这里我们可以使用res作为一个值,但我保持了它的一致性
}, 500);
}
剂量测量(功能(结果){
doSomethingElse(结果,函数(新结果){
doThirdThing(新结果、函数(最终结果){
log('获得最终结果:',finalResult);//切换为逗号以在控制台中正确显示
},故障回调);
},故障回调);
},故障回调)代码>它们在函数完成时作为参数传递到函数中。您需要查看promises@dandavis以哪种形式?请你写一个例子好吗?@SterlingArcher那个代码片段来自一个解释承诺的页面,哈。@SterlingArcher很好的承诺是用来避免类似的结构的,但我不太明白的是另一个东西,即参数流。
doSomething(function(result) {
doSomethingElse(result, function(newResult) {
doThirdThing(newResult, function(finalResult) {
console.log('Got the final result: ' + finalResult);
}, failureCallback);
}, failureCallback);
}, failureCallback);