我认为我在理解节点中的异步同步工作流方面有些漏水。我希望有人能告诉我我的泄漏是什么或我做错了什么。
我有一个基本功能
app.get('/', function(req, res) {
console.log("step 1");
myOAuthLogic();
console.log("step 2");
});
对于myOAuthLogic,我使用一个异步函数来调用promise:
function oauthPage(url) {
return new Promise((resolve, reject) => {
axios.request({
url: "/oauth2/token?grant_type=client_credentials",
method: "POST",
baseURL: "https://xxx/",
auth: {
username: "xxx",
password: "xxx"
},
headers: { 'content-type': 'application/x-www-form-urlencoded' },
data: {
"grant_type": "client_credentials",
"scope": "user"
}
}).then(res => {
resolve(res.data.access_token);
}).catch(error => {
console.log(error.response.status);
resolve("");
});
});
}
async function myOAuthLogic() {
try {
const token = await oauthPage('https://xxx/')
console.log(token);
} catch (error) {
console.error('ERROR:');
console.error(error);
}
}
我期望的是:
但是我得到的是
我认为与await异步将使函数等待直到准备就绪。我在这里理解错了吗?
答案 0 :(得分:1)
还将async / await用于路由器功能。
app.get('/', async function(req, res) {
try{
console.log("step 1");
await myOAuthLogic();
console.log("step 2");
}catch(err){
console.log(err);
res.sendStatus(500);
}
});
注意:无需创建新的Promise,您可以直接返回axios.request
。
function oauthPage(url) {
return axios.request({
url: "/oauth2/token?grant_type=client_credentials",
method: "POST",
baseURL: "https://xxx/",
auth: {
username: "xxx",
password: "xxx"
},
headers: { 'content-type': 'application/x-www-form-urlencoded' },
data: {
"grant_type": "client_credentials",
"scope": "user"
}
});
}
答案 1 :(得分:0)
您需要添加异步并等待以处理您的Promise函数:
app.get('/', async function(req, res) {
console.log("step 1");
await myOAuthLogic();
console.log("step 2");
});