Return 似乎没有在等待 javascript

Posted

技术标签:

【中文标题】Return 似乎没有在等待 javascript【英文标题】:Return doesn't seem to be awaiting javascript 【发布时间】:2018-10-09 14:07:32 【问题描述】:
const fs = require('fs')
const util = require('util')

const readFile = util.promisify(fs.readFile)

const buildMap = async () => 
  let map = await readFile(process.argv[2],  encoding: 'utf-8' )
  console.log(map) // Returns the right result
  return map // Returns `Promise  <pending> `


const game = buildMap()
console.log(game)

为什么在上面的代码中,具体是这样的

let map = await readFile(process.argv[2],  encoding: 'utf-8' )
console.log(map) // Returns the right result
return map // Returns Promise  <pending> 

即使它上面的行有正确的结果,返回返回 Promise 未决?我怎样才能改变它呢?

在此先感谢您对写得不好的问题感到抱歉...(写出格式良好的 SO 问题不是我的强项之一)

【问题讨论】:

你能把这个添加为答案吗 @CertainPerformance 请不要在 cmets 中回答问题。不花时间回复会使回复的人看起来像是复制了您的评论 - 就好像他们不知道问题的答案一样! @traktor53 好的,我把它变成了答案。我注意到其他人经常在 cmets 中回答小问题,当我发布一个真正的答案(针对琐碎但非拼写错误的问题)而不是评论时,它有时会吸引反对票。 @CertainPerformance 感谢您发布答案。其他一些人以在 cmets 中回答而闻名,但年龄太大而无法纠正 :-) 吸引反对票有其自身的风险标准 - 反对票可能表明答案可能会有所改善! 【参考方案1】:

async 函数总是返回承诺(即使它们的操作是完全同步的)。您必须根据通话结果致电.then

buildMap().then((game) => 
  // do stuff with game
  console.log(game);
);

请注意,您不能只用类似的东西来消费它

const game = await buildMap();

因为您不能在顶层 await - 您只能在异步函数内部 await

【讨论】:

哦,谢谢,我错过了“***await”这一点。我用谷歌搜索了关于这件事的漂亮文章:gist.github.com/Rich-Harris/0b6f317657f5167663b493c722647221

以上是关于Return 似乎没有在等待 javascript的主要内容,如果未能解决你的问题,请参考以下文章

在javascript中睡觉-没有setTimeout [重复]

Mocha 在运行测试之前似乎没有等待承诺链完成

长轮询如何工作 javascript?

如何等待浏览器完成javascript中的重排?

我可以使用 async/await 来等待 JavaScript 中的多个事件吗?

JavaScript async/await 没有正确等待?