You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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));

原写法失效的原因拆解

  1. 你写的匿名async函数(async () => { ... })只是定义了函数,但没有加()执行它,所以内部代码完全没运行
  2. 就算补上()执行匿名函数,它返回的也是一个Promise,而wrapMe会立刻返回value——这时候异步请求还在进行中,value依然是undefined

异步操作的核心逻辑是:不能在同步函数里直接拿到异步操作的结果,必须通过await或.then()等待异步流程完成后再处理数据。

内容的提问来源于stack exchange,提问作者haideralidev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 13:32:27