【发布时间】:2019-10-18 12:54:52
【问题描述】:
在调用异步函数时,我希望它返回一个 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);
}
}
通过对sendRequestToApprover 进行以下更改,我能够解决获取[object Promise] 的问题:
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]。
【问题讨论】:
-
console.log('channelName' + channelName)会将channelName隐式转换为字符串 -
使用console.log('channelName' + channelName.channel.name);
-
你正在记录函数返回的完整对象,它的值不是[object object],它在console.log被转换为字符串
标签: javascript object ecmascript-6 promise axios