loginTest()给我解析(值)所以它转到。然后,我的问题是因为promise是异步代码,console.log(令牌)在promise履行之前打印了promise-pending。我想显示值只有在承诺得到履行之后。能得到任何帮助吗?
const token = loginTest().then(res => res).catch(err => err);
console.log(token);
答案 0 :(得分:1)
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))
这假设token
是res
,如果它是一个对象并且你需要一个子属性,则相应地调整:)!
答案 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);