首页 > 解决方案 > 异步函数返回 [object Object] 而不是 value

问题描述

在调用异步函数时,我希望它返回一个 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]

标签: javascriptobjectecmascript-6promiseaxios

解决方案


当你这样做时:

console.log("channelName" + channelName);

您在toString上调用该方法channelName,并且在一个对象上这会导致[object Object].

console.log("Object.toString() -> " + { foo: "bar" });

您可以通过将另一个参数传递给console.log.

console.log("Object.toString() -> ", { foo: "bar" });


推荐阅读