在nodejs中使用async和await获取Promise {<pending>}

时间:2018-03-14 00:10:19

标签: javascript node.js async-await

在我的情况下,我能够获得令牌,但不是我想要的方式,即我不想打印承诺待定,并且在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();

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

所有async函数都会返回一个承诺,您仍然必须对.then()函数的返回值使用awaitasync才能使用它。如果从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模块产生的结果与写入的结果相同(不使用asyncawait):

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
  });
};