从异步回调函数返回结果

问题描述:

我已经看到很多关于在回调函数中获取异步调用的返回值的帖子,但我想知道如果我可以得到结果,而没有进入回调内部。从异步回调函数返回结果

对于如: 目前的情况

myFunc(arg1,arg2, mycallback); 
.. 
function mycallback(values) 
{ 
//Process values 
alert(values); 
} 

我想有

var returnedValues = myFunc(arg1,arg2, function mycallback(values) 
{ 
return values; 
}); 

// Now I would to use the returnedValues here... 

是上面的场景可能吗?请让我知道。

干杯。

+1

你想要一个未来...... – texasbruce

+0

所有你可能看到了同样的答案,这不能做的职位实施。 – 2015-06-28 00:28:46

你不能做到这一点,你可以做的是让Promises

引用的使用:......我能得到的结果,而不回调里面去了。

如果你关心callback hell,这是你可以通过承诺降低:

来自实例bluebird library

您应该使用的承诺,把这个:

fs.readFile("file.json", function(err, val) { 
    if(err) { 
     console.error("unable to read file"); 
    } 
    else { 
     try { 
      val = JSON.parse(val); 
      console.log(val.success); 
     } 
     catch(e) { 
      console.error("invalid json in file"); 
     } 
    } 
}); 

Into this: 

    fs.readFileAsync("file.json").then(JSON.parse).then(function(val) { 
     console.log(val.success); 
    }) 
    .catch(SyntaxError, function(e) { 
     console.error("invalid json in file"); 
    }) 
    .catch(function(e) { 
     console.error("unable to read file") 
    }); 

您可以使用承诺库。 下面是使用jQuery承诺

(function ($) { 
    function myFunc(arg1,arg2){ 
      var defer = $.Deferred(), 
       result=arg1+arg2; 
      defer.resolve(result); 
      return defer.promise(); 
    } 

    myFunc(1,2).then(function(result){ 
     console.log('result is: '+result) 
     //manipulate result as you want 
     result=result+1; 
     showFinalResult(result); 
    }); 
    function showFinalResult(result){ 
     alert(result); 
    } 
})(jQuery); 

http://jsfiddle.net/gfmvgc8p/