Javascript 为什么此超时回调无法返回? 函数一(num,回调){ 返回回调(num); }; 函数二(num){ //return num+99;

Javascript 为什么此超时回调无法返回? 函数一(num,回调){ 返回回调(num); }; 函数二(num){ //return num+99;,javascript,node.js,callback,Javascript,Node.js,Callback,调用匿名函数function(){return num+99;}的是setTimeout()的内部,因此该函数的返回值在setTimeout()的内部被忽略 two()函数没有返回值,因此当调用two()返回返回值时,返回值是未定义的 请注意,two()函数体中没有返回值: function one(num, callback) { return callback(num); }; function two(num) { // return num + 99; << thi

调用匿名函数
function(){return num+99;}
的是
setTimeout()
的内部,因此该函数的返回值在
setTimeout()的内部被忽略

two()
函数没有返回值,因此当调用
two()
返回返回值时,返回值是
未定义的

请注意,
two()
函数体中没有返回值:

function one(num, callback) {
  return callback(num);
};

function two(num) {
  // return num + 99; << this works
  setTimeout(function() { return num + 99; }, 1000); // << this doesn't
};

console.log(one(55, two));
函数二(num){

//return num+99;听起来您似乎理解发生了什么,但不清楚如何处理它

您知道
two
不能返回。很明显,如果
two
不能返回,那么
one
也不能返回

因此,剩下要做的就是接受它,并在整个堆栈中保持异步:

function two(num) {
  // return num + 99; << this works
  setTimeout(function() { return num + 99; }, 1000); // << this doesn't
};
因此
return
一路变为
callback
。请注意有多少节点API采用以下形式:

function one(num, doWork, callback) {
  doWork(num, callback);
};

function two(num, callback) {
  setTimeout(function() { callback(num + 99); }, 1000);
};

one(55, two, function (result) { console.log(result); });
即使它们是同步的,这也让它们可以轻松地使用异步API

还有其他一些很酷的模式可以帮助你在遇到麻烦时处理这个问题。我真的很喜欢异步技术开始变得疯狂时的承诺:


two
函数是异步的,并且不会返回任何内容。
return num+99;
您从该匿名函数返回的结果是无意义的,因为它是异步的。这就是它的工作方式。函数2立即返回,然后在一秒钟后返回num+99 runspherhaps详细介绍了fu匿名函数中返回的有用性?@mplungjan-这不是我的第一句话和最后一句话所做的吗?你是高谭需要的英雄,但不值得
action(args, function (errorMessage, successMessage) {});