![](/img/trans.png)
[英]What is the difference between having resolve, reject in a new Promise and not having it?
[英]What is the difference between Promise((resolve,reject)=>{}) and Promise(resolve =>{})?
我們知道Promise構造函數有一個執行函數,它有兩個參數,用於生成成功案例或失敗案例。 今天我正在編程而且我被困住但后來我解決了這個問題,但我發現有一件事需要被理解。
有什么區別
new Promise(resolve => {
// resolve
});
和
new Promise((resolve,reject)=>{
// resolve
// reject
});
我們可以這樣做嗎?
new Promise(resolve => {
// resolve
}, reject => {
// reject
});
將更加贊賞示例。 謝謝 !!!
這不是Promises特有的,只是回調函數。
new Promise((resolve) => {});
1創建一個Promise,其回調只接受resolve
參數。 無法調用否則將提供的拒絕功能。 2
new Promise((resolve, reject) => {});
創建一個Promise,其回調接受兩個參數,包括拒絕參數。
以上兩個示例演示了位置參數的工作原理。 回調函數中的第一個參數始終是resolve函數,第二個參數始終是reject函數。
new Promise((reject, resolve) => {});
將創建一個Promise,您可以在其中解決reject
並拒絕resolve
。
您可以throw
回調函數的范圍或resolve(Promise.reject())
以導致拒絕發生:
new Promise((resolve) => {
throw new Error("42");
// or `resolve(Promise.reject(new Error("42")));`
})
.catch(console.warn); // Prints warning “Error: "42"” in the console.
你不能使用new Promise((resolve) => {}, (reject) => {});
,因為Promise
構造函數只接受一個參數。 第二個回調函數將被忽略。
1 : (resolve) => {}
當然等同於resolve => {}
。 但箭頭函數參數實際上總是需要括號。 簡單和單個參數是可以省略的唯一例外 。 請參閱有關箭頭函數語法的MDN文章 。
2 :使用常規函數, new Promise(function(resolve){});
或new Promise(function(){});
你可以使用 arguments[0]
( 解析 )或arguments[1]
( 拒絕 ) 訪問任何參數 。
如果你知道承諾永遠不會失敗的事實,你可以省略reject
,例如計時器。 任何需要錯誤處理程序(http請求,文件i / o等)的東西都需要reject
回調。
您傳遞的箭頭功能是異步操作結束時觸發的回調。 它接受2個參數,在成功時調用的函數,(解析)和在失敗(拒絕)的情況下調用的函數。
在JS中,您不必將所有參數傳遞給函數回調。 如果你不打算處理錯誤(你應該處理!),你可以省略它。
如果你傳遞1個參數,則認為它是一個解析fn。
好吧,忘記了promises,如果任何帶有一個參數的函數被兩個參數調用,那么作為par JavaScript標准就沒有問題(反之亦然)。
現在,與您的承諾相關,您傳遞給構造函數的回調將被2個參數(解析器函數和拒絕器)調用。 如果你創建具有1個參數的函數並將其傳遞給Promise的構造函數,那么它只會被2個參數調用,因為你沒有引用第二個參數,你不能以它應該是用戶的方式使用它(作為通用語句)而不是承諾)。
如果你仍然需要第二個參數,你仍然可以嘗試使用arguments
但是,使用arrow
功能你也不會得到它。 在這種情況下,最好使用普通function () {}
。 否則,您可以嘗試使用Promise.resolve
或Promise.reject
顯式返回另一個promise
而且肯定最后一個帶有多個回調作為Promise構造函數的參數是不行的,因為它的設計就像有一個帶2參數的回調。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.