Với các mẫu mã bên dưới, có sự khác biệt nào về hành vi không, và nếu có, thì những điểm khác biệt đó là gì?
return await promise
async function delay1Second() {
return (await delay(1000));
}
return promise
async function delay1Second() {
return delay(1000);
}
Theo tôi hiểu, đầu tiên sẽ có xử lý lỗi trong hàm không đồng bộ và lỗi sẽ bong ra khỏi Promise của hàm không đồng bộ. Tuy nhiên, lần thứ hai sẽ yêu cầu ít đánh dấu hơn. Điều này có chính xác?
Đoạn mã này chỉ là một hàm thông thường để trả về một Lời hứa để tham khảo.
function delay(ms) {
return new Promise((resolve) => {
setTimeout(resolve, ms);
});
}
async
khỏi ( return promise
) mẫu thứ hai của bạn .
promise.then(() => nestedPromise)
sẽ phẳng và "theo" nestedPromise
. Điều thú vị là nó khác với các tác vụ lồng nhau trong C # ở chỗ chúng ta phải làm Unwrap
như thế nào. Một lưu ý nhỏ, có vẻ như await somePromise
các cuộc gọi Promise.resolve(somePromise).then
, thay vì chỉ somePromise.then
, có một số khác biệt ngữ nghĩa thú vị.