Функция JS возвращает значение до разрешения обещания - PullRequest
0 голосов
/ 15 февраля 2019

Я хочу заблокировать функцию от возврата значения до разрешения обещания.И pushheaders возвращает обещание obj, а не просто значение,

Я просто хочу, чтобы pushheaders возвращал токен, полученный из базы данных

import firebase from 'firebase';

let promise1 = new Promise((resolve, reject) => {
    firebase.auth().currentUser.getIdToken().then(token => {
      resolve(token);
    }).catch(err => {
      reject(err)
    });
});


export function pushHeaders (ct) {
  let b = await promise1.then(data => data);
  let headerz = {
    headers: {
      Authorization: 'Bearer ' + b,
  
    }
  }
  ct ? (headerz.headers['Content-Type'] = ct) : null; 
  return headerz;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.6.2/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/15.6.2/react-dom.min.js"></script>

Ответы [ 2 ]

0 голосов
/ 15 февраля 2019

Нет возможности синхронизировать обещания, поэтому с await ваша функция должна быть async:

export async function pushHeaders(ct) {
    const token = await promise1; // no need for a noop
    const headers = {
        headers: {
            Authorization: `Bearer ${token}`,
            ...(ct ? { 'Content-Type': ct } : {}), // ECMAScript2018
        },
    };
    return headers;
}

Это также означает, что она возвращает обещание, а не headers напрямую.Чтобы получить реальный результат, вам нужно либо использовать then, либо снова использовать asycn / await для вызываемого абонента.

0 голосов
/ 15 февраля 2019

Я вижу, что вы используете await, ключевое слово для машинописного текста, которое разрешено только, когда вы помечаете свою функцию с помощью Async, попробуйте

export async function pushHeaders (ct) {
...