# [學習筆記] Javascript非同步與同步 ### :small_blue_diamond: 非同步與同步操作混用時的輸出順序? 當非同步(asynchronous)和同步(synchronous)操作混用時,輸出順序可能會有所不同。這是因為非同步操作不會阻塞程式的執行,而是在背景中進行,同步操作則會阻塞程式的執行直到操作完成。 讓我們以一個簡單的例子來說明: ```javascript= console.log('開始'); setTimeout(function() { console.log('非同步操作'); }, 2000); console.log('同步操作'); //執行這段程式碼時,可能的輸出順序如下: 1.開始 2.同步操作 3.非同步操作 ``` <br> ### :small_blue_diamond: Promise的用途? Promise 是 JavaScript 中用於處理異步操作的一個概念和對象。它代表一個異步操作的最終完成(或失敗)以及它的結果值。 Promise 用於解決傳統的回調函數(callback)方式在處理異步操作時可能遇到的問題,例如回調地獄(callback hell)和難以處理錯誤。 Promise 在處理異步操作時非常有用。以下是一些常見的情況,你可能會使用到 Promise: * **網絡請求**:當進行 AJAX 請求或使用 Fetch API 從服務器獲取數據時,通常會返回一個 Promise 對象。你可以使用 .then() 方法處理成功響應,使用 .catch() 方法處理錯誤。 * **讀取文件**:當從本地文件系統讀取文件時,操作是異步的。Promise 可以用於處理文件讀取操作的完成或失敗。 * **定時器**:當你需要延遲執行一段程式碼或在一段時間後執行操作時,可以使用 Promise 和 setTimeout 函數結合。 * **多個異步操作的組合**:當你需要按照特定順序執行多個異步操作,或者在多個異步操作都完成後執行某些操作時,Promise 提供了方便的方式來處理異步操作的順序和組合。 * **非同步錯誤處理**:Promise 提供了 .catch() 方法,使你可以輕鬆捕獲和處理異步操作中可能出現的錯誤。 使用 Promise 可以使你的代碼更易於閱讀、理解和維護。它提供了一種統一的處理異步操作的方式,避免了回調地獄和錯誤處理的困難。 <br> > Promise 對象有三種狀態: > 1. 等待(pending):Promise 的初始狀態,表示異步操作尚未完成。 2. 完成(fulfilled):表示異步操作成功完成。 3. 拒絕(rejected):表示異步操作失敗。 一旦 Promise 進入完成或拒絕狀態,它就是不可變的,並且具有一個結果值或一個拒絕原因。 ```javascript! let promise = new Promise(function(resolve, reject) { setTimeout(function() { let randomNum = Math.random(); if (randomNum < 0.5) { resolve(randomNum); } else { reject(new Error('操作失敗')); } }, 2000); }); promise.then(function(result) { console.log('成功:', result); }).catch(function(error) { console.log('失敗:', error); }); 在這個例子中,我們創建了一個 Promise,它在 2 秒後返回一個隨機數。 如果隨機數小於 0.5,則 Promise 進入完成狀態並呼叫 resolve 函數,否則進入拒絕狀態並呼叫 reject 函數。 我們可以使用 .then() 方法來處理 Promise 成功完成的情況,並獲取結果值。 並且使用 .catch() 方法來處理 Promise 拒絕的情況,並獲取拒絕原因。 ```
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up