Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.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_Asynchronous_Promise - Fatal编程技术网

Javascript 回调返回值有意义吗?

Javascript 回调返回值有意义吗?,javascript,asynchronous,promise,Javascript,Asynchronous,Promise,通常,js中的异步函数会返回包含解析值或错误消息的承诺。如果不应用承诺样式,则可以将回调作为参数传递给该异步函数,在该函数中可以访问异步函数的结果 只是想知道这样一个回调使用return语句是否有意义?如果是这样的话,谁可以接收返回值?是否有任何有用的用例?下面是一段代码来说明您试图理解的概念 var callback = function(err, result){ if(err){ console.log(err); return err; }

通常,js中的异步函数会返回包含解析值或错误消息的承诺。如果不应用承诺样式,则可以将回调作为参数传递给该异步函数,在该函数中可以访问异步函数的结果


只是想知道这样一个回调使用return语句是否有意义?如果是这样的话,谁可以接收返回值?是否有任何有用的用例?

下面是一段代码来说明您试图理解的概念

var callback = function(err, result){
    if(err){
      console.log(err);
      return err;
    }
    callAnotherFunction(result);
};

function getRandom(cb){
   //do something
   var result = Math.random();
   if(result > 0.5){
     return cb(result);
   }
   return cb(null, result);
}
getRandom(callback);

如果随机数小于0.5,函数
getRandom()
将返回一个错误,否则返回一个值。然后,回调函数根据传递给回调函数的值以不同的方式处理响应。正如您所看到的,回调中的
return
语句起到了很大的作用。顺便说一句,上面的示例演示了NodeJS中的一个标准。

理论上,任何异步函数都应该返回类似于处理程序的内容,您可以使用它来跟踪进度,或者取消正在进行的异步操作,例如:

var timer = setTimeout(..)
clearTimeout(timer)
因为返回值是以同步方式获取此处理程序的唯一机会,但人们似乎并不十分关心这个问题,并发明了各种各样的东西来解决异步取消问题,请阅读更多关于此的内容

在理想的情况下,我们应该为每个异步函数提供一个处理程序:

handler = fs.readFile('...', function(err, data){...});
xhr = ajax('...', function(err, data){...});
...

像这样的?这真的没有道理。。。。这是一段丑陋的代码,它让我的思维扭曲了.console.log(“结果是”,add(5,4,function(result){return result;})),//结果是undefinedresult,返回给add方法。add方法应该是console.logging。将return添加到回调时,它将返回到调用它的位置。没有人从回调接收返回值。
返回的唯一效果,无论是否有值,都是从函数返回。@torazaburo,“唯一的效果”不是真的,如上所述,调用函数可能需要回调的返回值。尽管如此,回调几乎不可能是异步的。非常感谢,非常好的一点!只是看起来大于0.5而不是小于啊!
的诅咒。抢手货