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);
    })