非同步函數透過並發執行任務來實現非阻塞處理,傳回代表操作結果的 Promise。然而,當在沒有適當處理的情況下執行時,非同步函數可能會產生 Promise {
在提供的程式碼片段中,AuthUser 函數傳回一個代表 google.login 函數結果的 Promise。但是,隨後在 userToken = AuthUser(data) 中對 AuthUser 的呼叫會導致未解決的 Promise,因為沒有使用回呼處理其解析。
要捕捉 Promise 的結果, .then 或 .catch 方法必須附加到 Promise 中。這些方法可讓您分別處理 Promise 的解析或拒絕。
以下修改在回調中捕捉 userToken Promise 的值:
let userToken = AuthUser(data); userToken.then(function(result) { console.log(result); // "Some User token" });
Promise 本質上是具有前瞻性的。一旦解決,結果就會傳遞給 .then 或 .catch 處理程序,無論 Promise 的當前狀態如何。下面的 .then 處理程序將始終接收前面 .then 中傳回的鍊式 Promise 的解析值。
傳回值:
initPromise() .then(function(result) { console.log(result); // "initResolve" return "normalReturn"; }) .then(function(result) { console.log(result); // "normalReturn" });
Promise連結:
initPromise() .then(function(result) { console.log(result); // "initResolve" return new Promise(function(resolve, reject) { setTimeout(function() { resolve("secondPromise"); }, 1000) }) }) .then(function(result) { console.log(result); // "secondPromise" });
透過遵守這些原則,您可以有效地處理非同步操作並捕捉其解析值。
以上是如何有效處理非同步 JavaScript 中的 Promise 解析?的詳細內容。更多資訊請關注PHP中文網其他相關文章!