我必须根据代码片段注释完成以下代码片段,这样它才能在网站 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/