async函数内部返回值正确,外部获取值不符的技术咨询
问题原因及解决方案
第一个代码块的问题
所有async函数执行后都会返回一个Promise对象,而非函数内部return的实际值。你直接用let value = getValueFor('Key')赋值,value其实是未完成的Promise,所以console.log会输出对象;而函数内部的result是通过await等待异步操作完成后拿到的实际结果,因此输出正确。
第二个代码块的问题
JavaScript是单线程异步模型,同步代码会优先执行。console.log('value is ' + value)是同步代码,会在getValueFor('Key').then(...)的回调函数前运行——此时异步操作还没完成,value还是初始的'test',所以输出不会更新。
两种正确写法
- 用
await获取结果(需在async函数内执行):
async function logValue() { let value = await getValueFor('Key'); console.log('value is ' + value); } logValue();
- 在
then回调内执行输出:
getValueFor('Key').then(data => { console.log('value is ' + data); });
内容的提问来源于stack exchange,提问作者thetypist
相关产品推荐
相关产品推荐

