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

标签 javascript

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

相关文章:

javascript - 如何传递错误的变量

javascript - CSS 滚球动画位置

javascript - JSON——访问字段的字段

javascript - KnockoutJS Observable 未在模板中更新

javascript - jquery animate 回调直到最终循环才执行

javascript - 将变量添加到 .js 文件

javascript - Android 4.x - e.preventDefault e.pageX 和 a.pageY 坐标非 JQUERY

javascript - 等待两个 observable 完成 zip

Javascript 用于更改按钮单击时的 div 高度?

javascript - 我正在测试捕获表单上的提交按钮值