回调返回值是否有意义?

时间:2015-10-18 04:35:19

标签: javascript asynchronous promise

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

只是想知道这样的回调是否对r eturn 语句有意义?如果是这样,谁可以收到返回的值,是否有任何有用的用例?

2 个答案:

答案 0 :(得分:0)

这是一段代码,用于说明您试图理解的概念。

import numpy
days = numpy.array([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30])
recordedtemp = numpy.array([63,62,69,76,70,68,71,71,73,74,75,78,77,77,76,76,77,78,78,82,82,82,81,82,82,76,75,81,85,89])

print("Temperature:")
print(recordedtemp)

modelarray = numpy.round(0.5904*days + 67.048)

print('Error:')
print(recordedtemp - modeltemp)

如果随机数小于0.5,则函数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); 将返回错误,否则返回值。然后,回调会根据传递给回调函数的值以不同方式处理响应。正如您所看到的,回调中的getRandom()语句会产生很大的不同。顺便说一下,上面的例子演示了NodeJS中的标准error-first design pattern

答案 1 :(得分:0)

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

var timer = setTimeout(..)
clearTimeout(timer)

因为返回值是您以同步方式获得此处理程序的唯一机会,但似乎人们并不十分关心这一点并发明各种解决异步取消问题的东西,请阅读更多内容关于my note action-jshttp://jqueryvalidation.org/Validator.element的相关信息。

在一个完美的世界中,我们应该为每个异步函数获取一个处理程序:

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