如何将Promise的返回值赋值给对象?使用.then与匿名async函数尝试均未成功
我来帮你找出问题所在,然后一步步修复你的代码~
问题分析与修复方案
你的代码里有两个核心问题导致无法正确获取Promise的返回值:
- 你定义了匿名async函数但没有执行,里面的
await getPokimon(pokimon)代码根本没触发,所以value一直是初始的undefined - 就算执行了匿名函数,异步操作是异步完成的,
wrapMe会直接先返回value,这时候异步请求还没结束,value还没被赋值
修复后的完整代码
import fetch from 'node-fetch' import { setProps } from '../helpers/objectResponse.js'; if (!globalThis.fetch) { globalThis.fetch = fetch; } const wrapMe = async (pokimon) => { // 将wrapMe改为async函数,适配内部异步操作 const getPokimon = async (pokimon) => { const data = await fetch(`https://pokeapi.co/api/v2/pokemon/${pokimon.toLowerCase()}`); const response = await data.json(); return response } // 直接await异步请求结果,无需额外嵌套匿名函数 const data = await getPokimon(pokimon); return data; }
正确调用方式
因为wrapMe现在是async函数,返回的是Promise,所以调用时需要用await或者.then()等待结果:
// 方式1:在async函数内部用await async function getPokemonData() { const pikachu = await wrapMe('pikachu'); console.log(pikachu); } getPokemonData(); // 方式2:用.then()链式调用处理结果 wrapMe('charmander') .then(data => console.log(data)) .catch(err => console.error('请求出错:', err));
原写法失效的原因拆解
- 你写的匿名async函数
(async () => { ... })只是定义了函数,但没有加()执行它,所以内部代码完全没运行 - 就算补上
()执行匿名函数,它返回的也是一个Promise,而wrapMe会立刻返回value——这时候异步请求还在进行中,value依然是undefined
异步操作的核心逻辑是:不能在同步函数里直接拿到异步操作的结果,必须通过await或.then()等待异步流程完成后再处理数据。
内容的提问来源于stack exchange,提问作者haideralidev
相关产品推荐
相关产品推荐

