Не удается захватить результат части метода машинописи - PullRequest
0 голосов
/ 05 октября 2018

Я вызываю функцию 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 переменной?

1 Ответ

0 голосов
/ 05 октября 2018

Во-первых, вам нужно вернуться внутрь функции 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();
...