使函数等待调用完成后再返回

时间:2018-09-11 13:33:11

标签: javascript node.js reactjs asynchronous

我以前有以下代码:

static generate() {
    var now = new Date();
    return {
        "date": now.getDate(),
        "day": now.getDay(),
        "hours": now.getHours(),
        "minutes": now.getMinutes(),
        "month": now.getMonth(),
        "seconds": now.getSeconds(),
        "time": now.getTime(),
        "timezoneOffset": now.getTimezoneOffset(),
        "year": now.getFullYear() - 1900,
    };
}

这工作正常,但是从客户端获取了日期,这是一件坏事,所以我将这段代码移到了节点服务器上,现在看起来像这样:

router.get('/generateTime', cors(), (req, res, next) => {
    var now = new Date();
    res.json({
        "date": now.getDate(),
        "day": now.getDay(),
        "hours": now.getHours(),
        "minutes": now.getMinutes(),
        "month": now.getMonth(),
        "seconds": now.getSeconds(),
        "time": now.getTime(),
        "timezoneOffset": now.getTimezoneOffset(),
        "year": now.getFullYear() - 1900,
    });
});

generate()函数现在看起来像这样:

static async generate() {
    var now = await fetch('link/generateTime').catch(e => console.log(e));
    now = await now.json();
    return now;
}

在我像这样做一些firebase CRUD之前:

export function setLastActiveTime() {
    firebase.database().ref('Users').child(firebase.auth().currentUser.uid).child('lastActiveTime').set(Time.generate()).catch(e => console.log(e));
}

现在,我像这样使用async await使它工作:

export async function setLastActiveTime() {
    await firebase.database().ref('Users').child(firebase.auth().currentUser.uid).child('lastActiveTime').set(await Time.generate()).catch(e => console.log(e));
}

但是问题是,我需要在其他地方更改很多的代码,这样才能起作用。

是否有办法保持旧的setLastActiveTime()函数不变,并且仅更改generate()函数,以便它从服务器获取日期,并等待异步调用完成? / p>

0 个答案:

没有答案