从异步回调函数返回结果
问题描述:
我已经看到很多关于在回调函数中获取异步调用的返回值的帖子,但我想知道如果我可以得到结果,而没有进入回调内部。从异步回调函数返回结果
对于如: 目前的情况:
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...
是上面的场景可能吗?请让我知道。
干杯。
答
你不能做到这一点,你可以做的是让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);
你想要一个未来...... – texasbruce
所有你可能看到了同样的答案,这不能做的职位实施。 – 2015-06-28 00:28:46