异步等待未等待异步方法发生

时间:2020-09-06 23:58:07

标签: javascript asynchronous async-await

我正在建立一个项目的购物网站。我目前正在使用javascript编写loadcart方法。基本上发生的是,我将购物车数据存储在会话存储中。如果在会话存储中找不到购物车数据,我将从数据库中获取。我将函数设为异步函数,因为我的getshoppingcartDB函数是异步方法。

当会话存储中没有数据时,我希望我的方法输入if子句,从数据库中获取数据并更新购物车数组。但是,我的购物车数组仍然为空。我注意到购物车数组后来被更新,如屏幕截图所示。

这样,我有点好奇等待功能如何?我以为await应该先等待响应,但是在这里似乎异步执行了。

enter image description here

这是我的购物车功能

// Load cart
cart = [];
async function loadCart() {
    console.log("LOAD CART")
    var uname = document.getElementById("username").innerText
    uname = uname.trim();

    if (sessionStorage.getItem("shoppingCart") === null) {
        console.log("check null")
        const cartdata= await getshoppingcartDB(uname);
        cart = cartdata
    }else{
        cart = JSON.parse(sessionStorage.getItem('shoppingCart'));
        

    }
    
    return cart
    
    
}

loadCart().then(function(response){
    cart = response

})

这是我用于从数据库检索数据的异步功能

async function getshoppingcartDB(email) {

    let params = {
        "email": email
    };

    let query = Object.keys(params)
        .map(k => encodeURIComponent(k) + '=' + encodeURIComponent(params[k]))
        .join('&');

    let url = '/getcartdatabyemail?' + query;

    const response = await fetch(url);
    return response.json()

}

PS:我按照Mike的建议编辑了函数,但stll似乎不起作用?我似乎也无法执行结果=等待loadCart()。

0 个答案:

没有答案