在我的情况下,我能够获得令牌,但不是我想要的方式,即我不想打印承诺待定,并且在tokenDisp.js中运行后我的输出是:
output: Promise { pending }
t5Npxk5FfnRTj8iHd8vyyfGxnhXR4KQf
login.js:
module.exports = async function doLogin() {
const token = await loginToken();
const myToken = JSON.parse(token);
return console.log(myToken);
};
tokenDisp.js:
const myToken = require('./login.js);
myToken();
有人可以帮忙吗?
答案 0 :(得分:1)
所有async
函数都会返回一个承诺,您仍然必须对.then()
函数的返回值使用await
或async
才能使用它。如果从async
函数返回一个值,它将是返回的promise的已解析值。如果抛出异常,则异常将是拒绝返回的promise的原因。
在函数内部使用await
是一种方便的异步功能。它不会神奇地将异步操作变成同步操作。所以,你的函数返回一个promise。要从中获取价值,请在其上使用.then()
。
module.exports = async function doLogin() {
const token = await loginToken();
const myToken = JSON.parse(token);
console.log(myToken);
return myToken; // this will be resolved value of returned promise
};
const myToken = require('./login.js);
myToken().then(token => {
// got token here
}).catch(err => {
console.log(err);
});
注意:您的login.js模块产生的结果与写入的结果相同(不使用async
或await
):
module.exports = function doLogin() {
return loginToken().then(token => {
const myToken = JSON.parse(token);
console.log(myToken);
return myToken; // this will be resolved value of returned promise
});
};