同步在nodejs中使用promises的方式

时间:2018-03-14 02:02:33

标签: javascript node.js

loginTest()给我解析(值)所以它转到。然后,我的问题是因为promise是异步代码,console.log(令牌)在promise履行之前打印了promise-pending。我想显示值只有在承诺得到履行之后。能得到任何帮助吗?

 const token = loginTest().then(res => res).catch(err => err);
 console.log(token);

5 个答案:

答案 0 :(得分:1)

您可以使用Async / Await功能:

const token = await loginTest()
console.log(token)

例如:

async function getToken () {
  const token = await loginTest()
  console.log(token)
}

getToken()

你也可以为"同步"做以下事情。 promises方式:

loginTest()
  .then(res => res)  // Retained for example sake of chaining promises
  .then(res => console.log(res))
  .catch(err => console.log(err))

这假设tokenres,如果它是一个对象并且你需要一个子属性,则相应地调整:)!

答案 1 :(得分:1)

试试这个:

loginTest().then(res => {
   console.log(res.token);
}).catch(err => err);

这假定令牌是作为res的字段提供的。我不知道响应的结构,所以你需要检查一下。如果令牌异步,则不会直接从loginTest返回令牌。

答案 2 :(得分:1)

使用ES6的Async / Await。

const token = await loginTest();

但请注意,这行代码需要包含在async函数中。否则,等待将无法正常工作。请注意,等待不能在全局范围内使用。

例如:

async function getToken() { 
  const token = await loginTest();
  // this next line will execute after the result of of loginTest() returns
  console.log(token);
  // do something with token after this line
  const mutateToken = token + '123456';
}

此处的Async / Await文档:Async / Await

答案 3 :(得分:0)

尝试这个承诺:

var loginTest = new Promise(function 
(resolve, reject) {
    if (isLogin) {
        var login = {
            username: 'admin'
            //something that related with the loginTest..
        };
        resolve(login);
    } else {
        var reason = new Error('some errors..');
        reject(reason);
    }
})

loginTest
.then((fulfilled) => {
    console.log(fulfilled);
})
.catch((error) => {
    console.log(error.message);
})

因此,loginTest将在完成后打印,然后在出现错误时捕获错误。

答案 4 :(得分:0)

您无法通过以下方式访问令牌,因为它是asyn方法。

 const token = loginTest().then(res => res).catch(err => err);
 console.log(token);

而是使用下面的

loginTest().then(res => { 
   const token = res.token;
   // your further code goes here.
}).catch(err => err);