强制JQuery $ {document).ready等待承诺解决

时间:2020-04-23 17:50:37

标签: javascript jquery fetch es6-promise

因此,在将变量分配给获取请求的响应时遇到了一些麻烦。我本质上想对我的API运行获取请求,该请求将返回一个值。然后,我想将该值分配给html中的元素。

我用现有的东西时,可以看到该值已分配为Promise {<pending>}

我看到的一些解决方案是我可以运行多个$(document).ready(function(){});,但是我认为在移至下一个$(document).ready(function(){});

之前,它仍然无法解决承诺。

这是我到目前为止的

            var bal;
            $(document).ready(function(){
                function getCookie(name){
                    var value = "; " + document.cookie;
                    var parts = value.split("; " + name + "=");
                    if(parts.length == 2) return parts.pop().split(";").shift();
                }
                var decoded = jwt_decode(getCookie("JWT"));
                console.log(decoded.email);
                const url = "http://localhost:3001/wallets/" + decoded.email;
                bal = fetch(url).then((resp) => {
                    return resp.json();
                }).then((data) => {
                    console.log(data[0].balance);
                    return data[0].balance;
                }).catch((error) => {
                    console.log(error);
                });
                $(document).trigger("my-event");
            });
            $(document).on("my-event", function(){
                    console.log(bal);
                    console.log(parseFloat(bal));
                     var oMain = new CMain({
                                    win_occurrence:30,        //WIN PERCENTAGE.SET A VALUE FROM 0 TO 100.
                                    slot_cash: 100,          //THIS IS THE CURRENT SLOT CASH AMOUNT. THE GAME CHECKS IF THERE IS AVAILABLE CASH FOR WINNINGS.
                                    min_reel_loop:0,          //NUMBER OF REEL LOOPS BEFORE SLOT STOPS  
                                    reel_delay: 6,            //NUMBER OF FRAMES TO DELAY THE REELS THAT START AFTER THE FIRST ONE
                                    time_show_win:2000,       //DURATION IN MILLISECONDS OF THE WINNING COMBO SHOWING
                                    time_show_all_wins: 2000, //DURATION IN MILLISECONDS OF ALL WINNING COMBO
                                    money:bal,               //STARING CREDIT FOR THE USER
...

对于诺言如何工作以及如何强制使事情等待其解决,我仍然有些困惑。

1 个答案:

答案 0 :(得分:0)

仅提供更新并结束此问题。这是我最终解决问题的方法。

const finishedPromise = fetch(url).then(r=r.json()).then(data => {
    return data[0].balance'
});

然后在函数中分配简单使用的值

money: await finsihedPromise