【问题标题】:How to return a value from a function with subscribe? [duplicate]如何通过订阅从函数返回值? [复制]
【发布时间】:2019-09-08 08:59:04
【问题描述】:

这是 Javascript 中的一个函数,我需要通过订阅检查 Angular 服务是否包含数组,但返回值未定义,因为该函数不会更改订阅内的变量值。

    function checkAvailableBonus() {
        var dataSize = 0;
        var returnValue = "false";
        window.angularComponentRef.component.slotsBonusesService.getPlayerAvailableBonuses().subscribe(function (data) {
            dataSize = data.length;
            if (dataSize !== 0) {
                returnValue = "true";
            } else {
                returnValue = "false";
            }

        });
        return (returnValue);
    }
    checkAvailableBonus();

除了订阅完成后返回“true”/“false”的函数。

【问题讨论】:

  • 这个问题被问了多次,订阅是异步的。
  • 请注意,Observables 本身并不是异步的。只有当我们在流中执行微任务或宏任务时,它才会变成异步的。例如,of(1, 2, 3) 不会是异步的。

标签: javascript angular function return subscribe


【解决方案1】:

您的函数安装一个回调(subscribe(function (data) 位),然后立即返回 returnValue,无需等待回调执行,因此您将始终返回 "false"。

改为使用Promise:

function checkAvailableBonus() {
    return new Promise(resolve => {
        window.angularComponentRef.component.slotsBonusesService.getPlayerAvailableBonuses().subscribe(function (data) {
            const dataSize = data.length;
            if (dataSize !== 0) {
                resolve("true");
            } else {
                resolve("false");
            }

        });
    });
}
checkAvailableBonus().then(result => console.log(result));

【讨论】:

    猜你喜欢
    • 2018-04-24
    • 2016-11-12
    • 1970-01-01
    • 2019-12-09
    • 1970-01-01
    • 2020-12-03
    • 2019-12-15
    相关资源
    最近更新 更多