[英]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.