gpt4 book ai didi

javascript - 未捕获的 TypeError : getUsername(. ..).then 不是一个函数

转载 作者:行者123 更新时间:2023-11-30 14:03:00 29 4
gpt4 key购买 nike

我必须根据代码片段注释完成以下代码片段,这样它才能在网站 cs-dy.myshopify.com 上运行

在下面的代码中,我应该实现函数getUsename()。结果应该是一 strip 有用户名的问候消息。我需要在页面加载时测试代码。

注意事项:代码将在 'window.onload' 上运行我只能更改 getUsername() 函数中的代码我应该从对象键中获取用户名:DY.CS.username

function getUsername() {
//write code here to get the value of DY.CS.username
}

getUsername().then(function(userName) {
alert('Welcome '+userName+'!');
});

我可以使用 console.log(DY.CS.username);

获取值

我可以让函数 getUsername() 返回值:

function getUsername() {
//TODO write your code here to get the value of DY.CS.username
var userName = '';
if(DY && DY.CS) {
return userName = DY.CS.username;
}
}

但是当涉及到内联函数表达式时,它会吐出如下错误:

Uncaught TypeError: getUsername(...).then is not a function
at <anonymous>:10:15

这是函数,但我不能更改它:

getUsername().then(function(userName) {
alert('Welcome '+userName+'!');
});

(我只能更改 getUsername() 函数中的代码)。

所以,我想知道我做错了什么?

结果应该是一个提示“欢迎 John Bearyon!”

非常感谢!

最佳答案

getUsername的返回值似乎应该是 JavaScript Promise .

function getUsername() {
if (DY && DY.CS) {
return Promise.resolve(DY.CS.username);
}

return Promise.reject()
}

请记住 void (或者,也许更像 JavaScript 的说法是 undefined )不是返回类型为 Promise 的函数的有效返回值.隐式返回(不返回)或显式 return;语句返回 undefined .

考虑您当前方法的流程:

# psuedocode

if DY is defined and CS exists on DY
return DY.CS.username
else
... ?

else ...?代表隐含返回。 undefined#then不是函数。你仍然需要返回一个 Promise。它可以解析为 undefined .

处理此类事情的惯用方法是 reject (正如我在上面所做的那样),但是如果你想要与现在使用 Promises 时相同的行为,你必须解决 undefined .

function getUsername() {
if (DY && DY.CS) {
return Promise.resolve(DY.CS.username);
}

return Promise.resolve()
}

没有隐式 undefined 这样的东西使用 promise 返回。

也就是说,如果您使用的是 async/await , 隐式返回具有相同的行为

async function getUsername() {
if (DY && DY.CS) return DY.CS.userName;
}

返回类型是Promise<string | void>

关于javascript - 未捕获的 TypeError : getUsername(. ..).then 不是一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55976621/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com