Возврат из данных из вызываемой функции облака firebase с использованием пледа

Здравствуйте, я вызываю вызываемую функцию firebase, но она всегда возвращает null. Я не уверен, что именно я делаю неправильно. Я пытаюсь использовать плейд, чтобы обменять свой токен и получить токен доступа, но вот ссылки, которые я использовал https://plaid.com/docs/ и https://firebase.google.com/docs/functions/callable в качестве ссылок для написания моего кода. Любые предложения будут действительно оценены

exchange token 

const exchange_token = (data, context) => {

    const public_token = data.public_token;

    if (!context.auth) {
        throw new functions.https.HttpsError('failed-precondition', 'The function must be called ' +
            'while authenticated.');
    }
    return Plaid.client.exchangePublicToken(public_token, (error, tokenResponse) => {
        if (error !== null) {
            var msg = 'Could not exchange public_token!';
            return {
                status: 400,
                error: msg
            }
        }
        ACCESS_TOKEN = tokenResponse.access_token;
        ITEM_ID = tokenResponse.item_id;
        console.log("Access token: " + ACCESS_TOKEN + " Item Id: " + ITEM_ID);
        return {
            access_token: ACCESS_TOKEN,
            item_id: ITEM_ID,
            error: false
        };
    });
}

and my front end service 

exchangeToken(public_token: string){
    const exchangeToken$ = this.fireFunctions.httpsCallable("exchangeToken");
    return exchangeToken$({public_token: public_token});
  }
  
  and then my component 
  
   this.bankService.exchangeToken(event.token).subscribe(
      value => this.processToken(value),
      error => this.handleError(),
      () => this.finished = true)


person inhaler    schedule 17.07.2019    source источник
comment
Похоже, пришло время добавить ведение журнала отладки, чтобы выяснить, что именно работает не так, как вы ожидаете.   -  person Doug Stevenson    schedule 17.07.2019
comment
@DougStevenson Я вижу, что ACCESS_TOKEN есть в этой функции, и мой журнал консоли распечатывает его. Но почему-то не возвращается. Я возвращаю это и потребляю правильно?   -  person inhaler    schedule 17.07.2019
comment
Похоже, что функция токена обмена пледа возвращает void. @DougStevenson, у вас есть предложения, как справиться с такой ситуацией? Мне нужно будет вернуть что-то моему клиенту   -  person inhaler    schedule 17.07.2019


Ответы (1)


Привет, друзья, я понял это, решение состоит в том, чтобы обернуть плед-запрос обещанием и вернуть это обещание так

function exhangeToken(resolve, reject ){
    Plaid.client.exchangePublicToken(public_token, (error, tokenResponse) => {
       if (error !== null) {
            var msg = 'Could not exchange public_token!';
            reject( {
                status: 400,
                message: msg
            })
        }
        ACCESS_TOKEN = tokenResponse.access_token;
        ITEM_ID = tokenResponse.item_id;
        console.log("Access token: " + ACCESS_TOKEN + " Item Id: " + ITEM_ID);
        resolve( {
            status: 200,
            message: "Token exchange success"
        });
    });
}
return new Promise(exhangeToken);
person inhaler    schedule 17.07.2019