簡體   English   中英

為什么解析參數首先出現在 JavaScript Promises 中?

[英]Why resolve parameter comes first in JavaScript Promises?

我正在學習 javascript Promises。 在我看來,JavaScript Promise工作方式類似於callback函數。

callback函數中,我們通常使用第一個參數作為error第二個作為success

那么為什么在 JavaScript Promise ,參數的出現方式不同呢? 首先是success ,其次是error 這就像callback參數結構的相反,它讓我感到困惑。

這不是問題,但我想對此做出解釋。 如果我錯了,那我錯過了什么?

您顯然是在談論 Promise 執行器函數(您傳遞給new Promise(...) )。 這只是一種完全不同類型的回調,它與標准的 node.js 異步回調實際上沒有任何共同之處。

promise executor 函數向您傳遞了兩個獨立的函數,您可以稍后調用它們。 兩者都不是錯誤。 當您確實遇到錯誤時,您會調用reject(err)並將錯誤作為第一個參數傳遞給它。

傳遞兩件事的另一個地方是.then()處理程序,您可以在其中傳遞解析處理程序和拒絕處理程序。 同樣,這是完全不同的事情。 您正在向它傳遞兩個函數引用,promise 基礎結構將決定傳遞哪個回調。 當它調用這些回調時,它會將參數作為第一個參數傳遞。

以下是 Promise 中兩個不同的回調元素:

// promise executor function
let p = new Promise((resolve, reject) => {
    // this is passing to your callback two function references.
    // there's no error at this point.
    // you decide which function to call in your asynchronous operation
});

// then handler
somePromise.then(resolveData => {
    // this callback gets called when your promise resolves
    // it is known there is no error here, so no need to pass an err parameter
}, rejectErr => {
    // this callback gets called when your promise is rejected
    // the error is passed as the first argument
    // this callback is optional
});

還有.catch().finally()處理程序,但它們的工作方式與單個回調類似。

請記住,該模式:

 p.then(successHandler, errorHandler)

沒有將錯誤作為第二個參數傳遞給您。 您正在向它傳遞兩個函數引用,稍后它將調用其中一個。 通過這種方式,它不像fs.readFile()會使用的標准 nodejs 異步回調。 它有一個完全不同的目的和不同的工作方式。

您將 JavaScript 承諾回調與來自 Node 標准庫 API 的回調設計模式混淆了。 她們不一樣。

JavaScript promises 的目的是處理長時間運行的進程,我們需要一些能力來確定進程何時完成以繼續運行下一段代碼。

因此,在您正在了解的 Promises 回調中,有 3 種狀態: unresolvedresolutiondenied

默認情況下,Promise 存在於未解析狀態,這意味着您剛剛創建了 Promise 並且您正在等待某些事情發生,一些長時間運行的進程(例如 Ajax 請求或其他事件)發生,一旦發生,Promises 進入進入其他兩個狀態之一,解決拒絕

以上不是 Node 標准庫回調的目的和功能,它們在作為文件系統 API 一部分的函數內部使用。 這些特定的函數,例如read()readdir()等,有三個可以傳遞給它的參數,一個是可選的,第三個是您所說的回調。

使用文件系統函數時,Node 標准庫回調的模式是在該回調參數中提供兩個參數,第一個始終是錯誤對象err ,現在不能保證會發生錯誤,而是如果出現問題當打開一些文件時,Node 將使用err對象的第一個參數調用回調。

如果沒有錯誤,則第一個參數將為空。

現在回調函數的第二個參數將是我實際要查找的數據。

https://nodejs.org/api/fs.html#fs_file_system

你看,你在談論兩種不同的回調。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM