我想在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>
答案 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) {