[英]How does promise make code asynchronous?
我知道我們所有人都使用promise來避免函數回調地獄,但是我的問題是promise代碼在事件循環中的何處運行以及該代碼是否真正異步。
我的意思是,此代碼是否僅因為在諾言中運行而異步? 還是諾言不是事件循環的一部分?
const p = new Promise((resolve,reject) =>{ resolve('am i part of the event loop ? , am ia diffrent thread ? or am i synchronized? ') })
Promise如何使代碼異步?
沒有。
許諾提供了用於處理異步函數的標准接口(例如, .then()
方法)。
如果在Promise中完成的所有操作都是非異步的,則代碼仍然是非異步的。
const p = new Promise((resolve, reject) => { console.log(1); resolve(); console.log(2); }); console.log(3);
您可以在上面看到Promise正在阻塞,就像其他任何非異步代碼一樣。
在javascript中,我們無法創建同步函數。 設置了預定義的異步函數,我們可以使用它們使代碼異步。 這些異步函數通常以回調函數為參數來在異步任務完成時執行任務。
承諾是同步的, .then()
是異步函數。 在async-await中, await
是異步的,並且在await之后寫入的任何內容都會在async-wait之后執行。
function main(){
console.log(2);
return new Promise( (re,rj) => {
console.log(3);
re(4);
console.log(5);
rj(6);
console.log(7);
});
}
console.log(1);
main()
.then( r=> {
console.log(r)
})
.catch(e=>{
console.log(e)
});
console.log(8);
如預期的輸出是
1
2
3
5
7
8
// asynchronous .then function
4
當我們使用setTimeout,setInterval,API調用,fs函數時,會發生類似的事情,所有異步事件都發生在瀏覽器/內核中,然后所有回調都發生在我們的Javascript單線程中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.