Javascript 完成信号器函数后,如何将信号器函数的值返回给父函数?
我有一个信号器函数,它从集线器中检索一些数据 例如:Javascript 完成信号器函数后,如何将信号器函数的值返回给父函数?,javascript,jquery,signalr,Javascript,Jquery,Signalr,我有一个信号器函数,它从集线器中检索一些数据 例如: var getApple = function () { hub.server.getFruits("Apple").done(function (result) { return result; }); }; 当getFruits()完成时,我希望能够将getFruits()的值返回到getApple() console.log(getApple()); 但是,使用这种方法,getApple()将始终是未
var getApple = function () {
hub.server.getFruits("Apple").done(function (result) {
return result;
});
};
当getFruits()
完成时,我希望能够将getFruits()
的值返回到getApple()
console.log(getApple());
但是,使用这种方法,getApple()
将始终是未定义的
我尝试了以下(非常难看的)解决方案
var getApple = function () {
var result2;
hub.server.getFruits("Apple").done(function (result) {
result2 = result;
});
return result2;
};
但是,getApple()
在getFruits()
完成之前未定义。我可以通过setTimeout()
解决这个问题,但这显然是一个糟糕的解决方案
我也尝试了以下方法,但这似乎并没有返回getFruits()
的实际结果
据我所知,我缺乏异步javascript/jquery承诺(?)知识。我已经阅读了文档并查看了其他一些SO问题,但无法正确地将其置于上下文中
我非常希望能提供一个适当实现的代码示例。类似的方法可以奏效-基本上,您需要在函数中创建一个promise对象,如下所示:
var callTestMethod = function() {
var promise = new Promise(function(resolve, reject) {
var result = myHub.server.testMethod();
resolve(result);
});
return promise;
}
这就是你如何称呼它并等待结果:
$.when(callTestMethod()).done(function(result) {
alert(result);
})
正是我需要的。谢谢。:)
$.when(callTestMethod()).done(function(result) {
alert(result);
})