我有一个 SignalR 函数,可以从集线器检索一些数据。
示例:
var getApple = function () {
hub.server.getFruits("Apple").done(function (result) {
return result;
});
};
我希望能够返回 getFruits()
的值至getApple()
当getFruits()
完成;
console.log(getApple());
但是使用这种方法,getApple()
永远是未定义的。
我尝试了以下(非常丑陋)的解决方案
var getApple = function () {
var result2;
hub.server.getFruits("Apple").done(function (result) {
result2 = result;
});
return result2;
};
但是getApple()
直到 getFruits()
才定义已完成。我可以通过 setTimeout()
解决这个问题但这显然是一个糟糕的解决方案。
我也尝试了以下操作,但这似乎并没有返回 getFruits()
的实际结果.
var getApple = function () {
return hub.server.getFruits("Apple").done(function (result) {
return result;
});
};
据我了解,我缺乏异步 javascript/jquery Promise(?) 知识。我已阅读文档并查看了其他一些 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);
})
关于javascript - 当 SignalR 函数完成时,如何将 SignalR 函数的值返回到父函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43940702/