根據mdn總結
promise有三種狀態:
一旦promise的任務處理完成(pending狀態結束),promise就處於fulfilled或rejected狀態。
fulfilled時會執行resolve**(通過promise.prototype.then()
繫結);rejected會執行reject**(通過promise.prototype.catch()
或promise.prototype.then()
繫結)。
一旦promise的結果確定就不會再改變。所以promise.prototype.then()
和promise.prototype.catch()
始終返回新的promise物件。
const p1 = new promise((resolve, reject) => );
var p2 = p1.then((value) => );
var p3 = p1.catch((value) => );
console.log(p1 === p2);// false
console.log(p1 === p3);// false
console.log(p2 === p3);// false
promise.prototype.then()
的返回值取決於其繫結的**函式的返回值。
如果then()
的**函式:
返回非promise型別的值或沒有返回:
then()
返回乙個成功狀態的promise物件,並將**函式的執行結果作為該promise物件的resolve()
**的入參。
const p1 = new promise((resolve, reject) => );
var p2 = p1.then((value) => );
p2.then((value) => );
換句話說,**函式的返回值是啥,下乙個then()
的入參就是啥。
//這樣看著更清楚
const p1 = new promise((resolve, reject) => ).then((value) => ).then((value) => );
丟擲異常:
then()
返回乙個失敗狀態的promise物件,並將異常的錯誤資訊作為該promise物件的reject()
**的入參。
const p1 = new promise((resolve, reject) => );
var p2 = p1.then((value) => );
p2.then((value) => );
p2.catch((value) => )
換句話說,**函式執行出錯,後續的then()
就不執行了,變成catch()
執行了。
const p1 = new promise((resolve, reject) => ).then((value) => ).then((value) => ).catch((value) => )
返回promise型別的值:
then()
的**函式返回promise物件的話,then()
會返回同狀態(pending、fulfilled、rejected)的新promise物件。
const p1 = new promise((resolve, reject) => );
let pinner;
let p2 = p1.then((value) => );
return pinner;
});console.log(p2 === pinner);//false
不執行:
then()
的**函式不執行,則意味著該promise物件是失敗狀態。即使是失敗狀態,then()
的**函式不執行,then()
依然會返回新的promise物件。
const p1 = new promise((resolve, reject) => );
let p2 = p1.then((value) => );
let p3 = p2.then((value) => );
console.log(p3 === p2);//false
//雖然p3是新建立的promise物件,但其錯誤資訊依然保留。
p3.catch((value) => )
promise.prototype.catch()
也類似,實際上catch()
內部也呼叫了then()
。
如果catch()
的**函式:
返回非promise型別的值或沒有返回:
同then()
,建立乙個成功狀態的promise物件。
const p1 = new promise((resolve, reject) => );
//p1失敗,走catch
var p2 = p1.catch((value) => );
//p2成功,走then,不走catch。
p2.then((value) => );
p2.catch((value) => )
丟擲異常:
同then()
,返回乙個失敗狀態的promise物件。
const p1 = new promise((resolve, reject) => );
//p1失敗,走catch
var p2 = p1.catch((value) => );
//p2失敗,不走then,走catch。
p2.then((value) => );
p2.catch((value) => )
返回promise型別的值:
同then()
。
不執行:
同then()
。
promise 鏈式程式設計then返回值的問題
最近複習promise 物件的時候,發現promise鏈式程式設計時then返回值不太懂的問題,查閱資料後,總結如下 then 的返回值 1.函式return 任意數值 或者 不返回資料 返回ndefined 時,then 方法返回的是乙個狀態為fulfilled狀態的promise物件 2.函式r...
關於CString IsEmpty 的返回值
明顯是你的cstring當字串陣列用來當引數傳遞進去後返回了。這個例子很容易重現。找個winapi函式,這個函式必須是傳遞buf進去,然後用cstring作為引數傳遞進去。然後檢視cstring的長度。舉例如下 c c code 方式一 cstring szfilename getmodulefil...
關於scanf的返回值
在a題的時候,我們經常會在while 語句中寫scanf的返回值,例如while scanf d x 1 這樣的語句,今天我們就來說關於scanf的返回值問題。眾所周知scanf 返回的是輸入個數,但當輸入不匹配或者格式化引數與實參不匹配時,scanf又是如何返回引數值的,我們來研究研究 我們先看如...