javascript - 当 SignalR 函数完成时,如何将 SignalR 函数的值返回到父函数?

标签 javascript jquery signalr

我有一个 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/

相关文章:

azure - 更新应用程序设置时,Azure Functions 是否会引发 503 错误?

c# - 在 NCrunch 中运行但不在 Resharper 中运行的单元测试

javascript - rotateY(90deg)时如何让div不消失

javascript - d3js 条形图 : can two bars represent two different categories/variables?

javascript - $(...).DataTable 在使用 Laravel Mix 时不是函数

jquery - 如何获取多选中所有选定的值?

c# - 如何在 vNext 中获取 SignalR 端点列表?

javascript - 在 React 中使用 useState 无法更新功能组件中的状态

javascript - 无法打印 getDay() 方法的结果

javascript - 页面刷新时,需要获取输入的值