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