繁体   English   中英

关于节点缓存 object 在将其值分配给常量后更改为已解析 promise 的问题

[英]Question about node-cache object changing to a resolved promise after assigning its value to a constant

我正试图围绕 Nodejs 和 Promises 进行思考,但我看到了一种我不太理解的行为,所以我想从专家那里获得一些帮助:)

我有 trainStations.js 文件,它返回信息并使用节点缓存库对其进行缓存。

async function getTrainStations(){
    var stations = await knex.select()
        .from('TrainStations')

    stations.forEach(
        item => cache.set(item['code'], item['name'])
    );

    knex.destroy();
    return cache;
}

module.exports = {
    getTrainStations
};

然后。 在 app.js 文件中,我将其称为:

const stations = (async () => {
    let res = await stationsModule.getTrainStations();
    return res;
})();

如果我调试“res”,它显然是一个节点缓存 object,我可以用一个键调用 get 方法并获取它的值。 但是,当它被分配给工作站时,它以解析的 promise 的形式执行,当我调试时我可以看到这些值,但我不知道如何返回 promise 的值并将其用作我想。

所以基本上问题是,为什么“res”有一个合适的节点缓存 object,但后来当我想使用“站”时,我有一个已解析的 promise。 另外,我如何访问已解析的 promise 中的值? 我尝试了 with.then() 并且可以在 console.log 中打印这些值,但根本无法使用它们。

在此先感谢您的帮助!

async function 调用始终返回 promise 作为 [异步] 操作的结果。

const stations = (async () => {
    let res = await stationsModule.getTrainStations();
    return res;
})();

stations被分配由匿名箭头返回的 promise function 调用const stations = (async () => {...})();

promise 将在数据可用时使用res解析。

可能值得注意的是,您不能将异步结果(将来获得)返回到请求操作的事件循环中的同一调用。 在事件循环的那一回合中,结果是未决的。

一旦使用了await ,所有使用结果的代码必须在async function 中,使用普通代码中的 promise 处理程序访问,或者由数据到达后触发的计时器或事件触发。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM