Tôi vừa mới đọc bài viết tuyệt vời này « Máy phát điện » và nó làm nổi bật rõ ràng chức năng này, đây là một chức năng trợ giúp để xử lý các chức năng của trình tạo:
function async(makeGenerator){
return function () {
var generator = makeGenerator.apply(this, arguments);
function handle(result){
// result => { done: [Boolean], value: [Object] }
if (result.done) return Promise.resolve(result.value);
return Promise.resolve(result.value).then(function (res){
return handle(generator.next(res));
}, function (err){
return handle(generator.throw(err));
});
}
try {
return handle(generator.next());
} catch (ex) {
return Promise.reject(ex);
}
}
}
mà tôi giả thuyết ít nhiều là cách asynctriển khai từ khóa với async/ await. Vậy câu hỏi đặt ra là, nếu đúng như vậy, thì sự khác biệt giữa awaittừ khóa và từ khóa là cái quái yieldgì? Có phải awaitluôn luôn biến điều gì đó thành một lời hứa, trong khi yieldkhông đảm bảo như vậy? Đó là dự đoán tốt nhất của tôi!
Bạn cũng có thể thấy cách async/ awaittương tự như yieldvới máy phát điện trong bài viết này, nơi anh ấy mô tả chức năng 'sinh sản' các chức năng không đồng bộ ES7 .