【问题标题】:TypeScript How to access field in promise method [duplicate]TypeScript如何访问promise方法中的字段[重复]
【发布时间】:2020-10-22 19:53:58
【问题描述】:

我正在尝试访问 promise 方法中的字段。

代码如下:

// Import stylesheets
import './style.css';
export class User{
  
  firstName:string;
  lastName:string;
  constructor(){
    this.firstName = "Tom";
    this.lastName = "Jack";
    this.getName = this.getName.bind(this);
  } 
  getName():Promise<string>{
    return new Promise((resolve,reject) =>{
      return resolve(`My Name is ${this.firstName} ${this.lastName}`);
    }) ;
  }
}

export class UserApi{
  userName:string;
  getUserName():string{
    let user = new User();
    user.getName().then(name => {
      return name;
    });
    return '';
  }
  
}
// Write TypeScript code!
const appDiv: HTMLElement = document.getElementById('app');
appDiv.innerHTML = `<h1>TypeScript Starter</h1>`;
let user = new UserApi();
appDiv.append('This is ' + user.getUserName());

user.getUserName() 返回空。

如何从promise方法中得到期望的字符串?

也就是说,如何在 Promise 方法中访问this

更新:

我对 Promise 的返回值没有问题,请注意如何从返回 Promise 的类方法中访问类属性或值。

【问题讨论】:

  • 你为什么在这里使用Promise
  • @Antoni 这只是一个演示,getName() 将是一个发送请求或任何其他操作的方法。
  • @jonrsharpe 它是如何工作的?我想在Promise方法getName()访问this.firstName

标签: javascript typescript promise es6-promise


【解决方案1】:

您应该从 getUserName 方法返回一个承诺。像这样:

getUserName(){
    let user = new User();
    return user.getName().then(name => {
        return name;
    });
}

如果你只是要返回上面的名字,你不需要“then”:

return user.getName();

当您使用 getUserName 方法时,您需要处理 promise。像这样:

let user = new UserApi();
user.getUserName().then((name) => {
    appDiv.append('This is ' + name);
});

【讨论】:

  • 对于你的代码,getUserName 会抛出错误。
  • 很抱歉。什么错误?
  • 检查demo
  • 是的。修复 getUserName 的返回类型并更新最后一行的用法,它应该可以工作
  • 它返回预期结果,我想知道是否有任何方法可以避免user.getUserName().then
猜你喜欢
  • 2021-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-05
  • 2013-04-18
  • 2018-12-24
  • 2018-06-01
  • 1970-01-01
相关资源
最近更新 更多