JS函数在答应解决之前返回值

时间:2019-02-15 08:22:21

标签: firebase functional-programming firebase-authentication es6-promise

我想在Promise解决之前阻止该函数返回值。而且,pushheader返回一个promise obj而不是仅仅返回值,

我只希望pushheaders返回从firebase获取的令牌

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 :(得分:2)

无法同步诺言,因此与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

答案 1 :(得分:0)

我看到您正在使用await,这是一个typescript关键字,仅当您使用Async标记功能时才允许使用

export async function pushHeaders (ct) {