Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/451.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript中的大量嵌套函数_Javascript_Callback - Fatal编程技术网

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

我一直在阅读JavaScript中的异步函数,发现我不太理解下面的代码

这是:

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);