Saya baru-baru ini membaca beberapa artikel dan mula menggunakan async untuk memproses kod asynchronous. Ia adalah lebih mudah untuk digunakan berbanding panggilan balik tak segerak yang sebelumnya, bagaimanapun, saya mendapati bahawa terdapat masalah dengan kaedah penulisan saya dan semua orang boleh tolong saya betulkan....
(async function(){
let username = req.body.username;
let password = req.body.password;
// 查找当前用户名是否已经注册(返回值为数组,没有结果则为空数组,长度为0)
let userIsRegisted = await user.findByName(username);
// 因为用户名的唯一性,可以使用==1或者!=0两种方式判断
if(userIsRegisted.length!=0){
res.send('当前用户已注册');
return;
}
// 密码加密
let hashPassword = crypto.createHash('sha1').update(password).digest('hex');
let obj = {
username:username,
password:hashPassword
}
// 添加新用户
await user.create(obj);
// 设置session
req.session.username=username;
req.session.loged = true;
res.send('注册成功');
})();
Terlupa logik menulis, inilah kaedah panggilan, kan?
Jika fungsi tanpa nama tidak diisytiharkan sebagai async, cara penulisan ini akan terasa pelik. Memandangkan await digunakan dalam fungsi tanpa nama ini untuk memanggil fungsi lain, ia mesti diisytiharkan sebagai tidak segerak, jika tidak, ralat kompilasi akan dilaporkan. Ia boleh dilaksanakan serta-merta seperti yang ditulis oleh poster asal. Walau bagaimanapun, adalah lebih disyorkan untuk mengisytiharkan nama fungsi untuk fungsi tanpa nama dan memanggil fungsi itu secara tidak segerak.
Gunakan try catch lebih kerap Selain itu, saya tidak pasti mengapa anda menyertakan fungsi pelaksanaan segera di sini. Tentukan nama untuk fungsi async. Anda boleh menyesuaikan panggilan kemudian
Secara amnya, tiada masalah untuk menggunakannya dengan cara ini. Apabila fungsi async dipanggil dengan await, ia kembali serta-merta daripada fungsi utama Apabila fungsi async tamat, ia terus melaksanakan fungsi utama.
Jika menunggu tidak digunakan, fungsi utama akan dilaksanakan. Pada masa yang sama, fungsi async akan dilaksanakan secara tak segerak.