Обещание вернуть функцию вместо объекта - PullRequest
0 голосов
/ 30 мая 2018

Я использую модуль узла fbgraph, чтобы получить данные от пользователя Facebook и создать учетную запись в нашем приложении.

У меня есть следующий код, который заключен в асинхронную функцию:

const newUser = await new Promise((resolve, reject) => {
  graph.get(url, (err, res) => {
    if (err) {
      return reject(err);
    }

    const user = new User();
    user.firstName  = res.first_name;
    user.lastName   = res.last_name;
    user.email      = res.email;

    return resolve(user);
  });
});

this.register(newUser);

Мне не удается передать переменную newUser в мою функцию регистрации, и я получаю эту ошибку:

Argument of type '{}' is not assignable to parameter of type 'User'.

После входа в систему newUser она выглядит правильно User объект, который я ожидаю, но когда я регистрирую newUser.constructor, оказывается, что на самом деле возвращается [Function: User]

Я не особенно опытен с Обещаниями, и я чувствую, что проблема лежит где-то там,Любая помощь с благодарностью!

1 Ответ

0 голосов
/ 30 мая 2018

Typescript не может вывести фактический тип обещания, поэтому по умолчанию что-то - в этом случае {}.

Вы должны явно указать Promise и создать Promise<User> тип, т.е.

const newUser = await new Promise<User>((resolve, reject) => {
    //...
})
...