關於Promise的返回值

2022-09-21 12:51:09 字數 3399 閱讀 9745

根據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又是如何返回引數值的,我們來研究研究 我們先看如...