const promise = new Promise((resolve, reject) => { console.log(1); resolve(); console.log(2); }) promise.then(() => { console.log(3); }) console.log(4);
Promise一旦創建立即執行
所以1,2輸出
Promise.then 在所有的代碼執行完畢后執行
所以3最后
所以是1243
2、第二題
const promise = new Promise((resolve, reject) => { resolve('success1'); reject('error'); resolve('success2'); }); promise.then((res) => { console.log('then:', res); }).catch((err) => { console.log('catch:', err); })
Promise一旦創建立即執行
resolve函數是當Promise對象的狀態從“未完成”變為“成功”(即從pending變為resolved),在異步操作成功時調用,並將異步操作的結果,作為參數傳遞出去;
reject函數將Promise對象的狀態從“未完成”變為“失敗”(即從pending變為rejected),在異步操作失敗時調用,並將異步操作報出的錯誤,作為參數傳遞出去。
Promise只能resolve一次,剩下的調用都會被忽略。而一旦狀態改變,就不會有再變,所以代碼中的reject('error');不會有作用。
reject函數將Promise對象的狀態從“未完成”變為“失敗”(即從pending變為rejected),在異步操作失敗時調用,並將異步操作報出的錯誤,作為參數傳遞出去。
Promise只能resolve一次,剩下的調用都會被忽略。而一旦狀態改變,就不會有再變,所以代碼中的reject('error');不會有作用。
所以第二次resolve('success');也不會有作用。
答案:then:success1
答案:then:success1
3、第三題
Promise.resolve(1) .then(2) .then(Promise.resolve(3)) .then(console.log)
Promise.resolve方法的參數,如果是一個原始值,或者是一個不具有then方法的對象
原始值即一些代表原始數據類型的值,也叫基本數據類型,Number,String,Boolean,Null,Undefined這些基本數據類型都是原始值。
則Promise.resolve方法返回一個新的Promise對象,狀態為resolved。Promise.resolve方法的參數,會同時傳給回調函數。
參數為1,number類型所以為原始值。所以1傳給回調函數。
then方法接受的參數是函數,而如果傳遞的並非是一個函數,它實際上會將其解釋為then(null),這就會導致前一個Promise的結果會傳遞下面。
2不是函數,所以前一個promise的結果是傳給回調函數的1,往下傳遞。
答案 1
答案 1
4、第四題,定時器
定時器相當於一個異步操作,會先向后執行

所以執行結果是