2015-06-27 116 views
1

我已經看到很多關於在回調函數中獲取異步調用的返回值的帖子,但我想知道如果我可以得到結果,而沒有進入回調內部。從異步回調函數返回結果

對於如: 目前的情況

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

回答

0

你不能做到這一點,你可以做的是讓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") 
    }); 
0

您可以使用承諾庫。 下面是使用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/