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 async
triể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 await
từ khóa và từ khóa là cái quái yield
gì? Có phải await
luôn luôn biến điều gì đó thành một lời hứa, trong khi yield
khô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
/ await
tương tự như yield
vớ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 .