首页 > 解决方案 > 无法捕获打字稿方法的结果

问题描述

我正在调用createUser(....)如下函数

let response=  this.createUser(email,false,"+"+phoneNumber,password,displayName,false);

这就是功能。

createUser(email:string, emailVerified:boolean, phoneNumber:string, password:string, displayName:string, disabled:boolean ) {
    admin.createUser({
        email: email,
      emailVerified: emailVerified,
      phoneNumber: phoneNumber,
      password: password,
      displayName: displayName,
      disabled: disabled
     })
      .then(function(userRecord) {
        // See the UserRecord reference doc for the contents of userRecord.
        console.log("Successfully created new user:", userRecord.uid);
        return Promise.resolve(userRecord);
      })
      .catch(function(error) {
        console.log("Error creating new user:", error);
        return Promise.reject;
     });
     return null;
 } 

但我想捕获在该方法的一部分下createUser创建的返回结果。then如何捕获其结果,即变量async调用?response

标签: javascripttypescriptasynchronouspromiseasync-await

解决方案


createUser首先,您需要像这样在函数内部返回:

// ...
function createUser( /*params omitted*/ ) {
  return admin.createUser({ // <-- notice the return here
      // ...
    })
    .then(function(userRecord) {
      //...
      return Promise.resolve(userRecord);
    })
    .catch(function(error) {
      // ... remember return the error data too
    });
  // return null;
}
// ...

现在你可以得到这样的结果:

1.在async函数内部使用await

async function getValue() {
  let response = await this.createUser( /*params*/ );
}

演示:

function resolveAfter2Seconds() { 
  return new Promise(resolve => {
    setTimeout(() => {
      resolve("sample data after 1 second");
    }, 1000);
  });
}

async function f1() {
  var x = await resolveAfter2Seconds();
  console.log(x);
}
f1();

2.在常规函数内部使用回调内部then表达式(来自Promise.resolve):

function getValue() {
  this.createUser( /*params*/ ).then(function(userRecord) {
    let response = userRecord;
  });
}

演示:

function resolveAfter2Seconds() { 
  return new Promise(resolve => {
    setTimeout(() => {
      resolve("sample data after 1 second");
    }, 1000);
  });
}

function f1() {
  resolveAfter2Seconds(10).then(function(sampleData) {
     console.log(sampleData);
  });
}

f1();


推荐阅读