猿问

异步函数返回 [object Object] 而不是值

在调用异步函数时,我希望它返回一个 JSON 有效负载,以便我可以从对象中提取一个值。但是,该函数只返回[object Object]


异步函数是在普通函数中调用的,所以我尝试将父函数更改为异步函数。这对我有帮助,因为最初我只获得了[object Promise]


最初,我正在尝试这样做:


const sendRequestToApprover = (userId, announcement, username) => {

  const { title, details, channel } = announcement;


  const channelName = channels.getChannelName(channel);

  console.log('channelName' + channelName);

和getChannelName看起来像:


async function getChannelName(id) { 

  try {

    return await api.get('/channels.info', {

      params: { 

        token: botToken,

        channel: id,

      }

    });

  } catch (err) {

    console.log(err);

  }

}

我能够[object Promise]通过对以下内容进行更改来解决获取问题sendRequestToApprover:


async function sendRequestToApprover(userId, announcement, username) {

  const { title, details, channel } = announcement;


  const channelName = await channels.getChannelName(channel);


  console.log('channelName' + channelName);

请注意,它现在是一个异步函数,我添加await到函数调用中。


我知道调用的有效载荷将返回以下内容:


{

    "ok": true,

    "channel": {

        "id": "CJSFDR83T",

        "name": "general",

...

}

我不太明白为什么在这种情况下我无法得到这个名字。我已经在其他功能中完成了这个,这个让我很难过。channelName还在回来[object Object]。


30秒到达战场
浏览 515回答 3
3回答

一只甜甜圈

当你这样做时:console.log("channelName" + channelName);您正在调用toString方法 on channelName,并且在一个对象上调用这会导致[object Object].console.log("Object.toString() -> " + { foo: "bar" });您可以通过向 传递另一个参数来避免这种情况console.log。console.log("Object.toString() -> ", { foo: "bar" });
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答