如何从带有订阅的函数返回值?

时间:2019-09-08 08:59:04

标签: javascript angular function return subscribe

这是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”的函数之外,我都是这样。

1 个答案:

答案 0 :(得分: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));