主要是 Promise 和 await 的用法。
A 調(diào)用一個函數(shù) func1,希望函數(shù) func1 的返回值可以同步的返回,但是在 func1 返回的值 需要用到 異步函數(shù) func2 的回調(diào)后的數(shù)據(jù)。
普通的情況下,func1 執(zhí)行完后,異步的 func2 還沒有執(zhí)行完成,過一會才能執(zhí)行到 func2 的回調(diào),而這時func1 已經(jīng)結(jié)束了。A 得到了錯誤的返回結(jié)果。
而用 Promise 包裝了 func2 ,并且 await func1 方法。就可以一直等待 func2 執(zhí)行完成后再賦值。
var token = await User.login(ctx.request.body.code);
console.log("token "+token);
module.exports = {
login: (code) => {
}
User.login(
return new Promise(function (resolve, reject) {
https.get(wxjscode2sessionUrl, (resp) => {
var data="";
resp.on('data', (chunk) => {
data += chunk;
});
resp.on('end', () => {
resolve(data);
});
})
}).on("error", (err) => {
console.log("Error: " + err.message);
});
});