Open azole opened 1 week ago
Ans: 不是所有,根據服務可用性不同(可能新推出的服務可能會先在少數幾個 Region 提供,或帳戶類型不同(某些新的或不活躍的帳戶可能無法立即使用某些高需求的 Region,例如美國東部 (us-east-1) 或歐洲 (eu-west-1)),還有專用地區限制(有些Region 主要用於特定的政府、國防機構等組織,並非所有 AWS 用戶都能選擇)
可以透過 AWS 的區域與服務可用性頁面查詢不同 Region 中哪些服務可用。
Ans: 有一些測試工具可以使用: 1. AWS Global Accelerator Latency Test 這個工具會測試從你的瀏覽器或伺服器到不同 AWS Region 的 Latency 情況,並且會提供你最佳的區域選擇。 AWS Global Accelerator Speed Comparison
2. CloudPing 一個非官方的第三方工具,可以幫助測試從你的地理位置到不同 AWS Region 的延遲。 CloudPing
Ans: Callback 版本:當工作變多時,程式碼會出現巢狀結構,逐漸形成 "callback hell"(隨著層次不斷加深,程式碼會逐漸向右縮排,看起來像是「金字塔」或「地獄」),如果在每個步驟中發生錯誤,還要額外處理錯誤,導致程式碼不易閱讀和維護。 Promise 版本:.then() 為鏈式結構而非巢狀結構,當一個 Promise 中發生錯誤時,它會自動將錯誤傳遞到最近的 .catch() 區塊。無論在哪一個步驟中出錯,都會被 .catch() 捕獲,可讀性也比較高。
Callback 版本 - 錯誤處理
function doJob(job, time, callback) {
setTimeout(() => {
let now = new Date();
if (Math.random() > 0.7) { // 模擬錯誤的發生
callback(`Error: ${job} 失敗 at ${now.toISOString()}`, null);
} else {
callback(null, `完成工作 ${job} at ${now.toISOString()}`);
}
}, time);
}
console.log(`開始工作 at ${new Date().toISOString()}`);
// 使用 Callback 的錯誤處理,每個步驟都會檢查是否有錯誤發生
doJob("刷牙", 1000, (err, result) => {
if (err) {
console.error(err);
return; // 若有錯誤發生,終止後續操作
}
console.log(result);
doJob("吃早餐", 3000, (err, result) => {
if (err) {
console.error(err);
return;
}
console.log(result);
doJob("寫功課", 1000, (err, result) => {
if (err) {
console.error(err);
return;
}
console.log(result);
doJob("吃午餐", 2000, (err, result) => {
if (err) {
console.error(err);
return;
}
console.log(result);
});
});
});
});
Promise 版本 - 錯誤處理
function doJob(job, time) {
return new Promise((resolve, reject) => {
setTimeout(() => {
let now = new Date();
if (Math.random() > 0.7) { // 模擬錯誤的發生
reject(`Error: ${job} 失敗 at ${now.toISOString()}`);
} else {
resolve(`完成工作 ${job} at ${now.toISOString()}`);
}
}, time);
});
}
console.log(`開始工作 at ${new Date().toISOString()}`);
// 使用 Promise 的錯誤處理
doJob("刷牙", 1000)
.then((result) => {
console.log(result);
return doJob("吃早餐", 3000);
})
.then((result) => {
console.log(result);
return doJob("寫功課", 1000);
})
.then((result) => {
console.log(result);
return doJob("吃午餐", 2000);
})
.then((result) => {
console.log(result);
})
.catch((error) => {
console.error("發生錯誤:", error);
});
Ans:
建立 .env.example 檔案
# .env.example 檔案
DATABASE_HOST=localhost
DATABASE_USER=your_username
DATABASE_PASSWORD=your_password
API_KEY=your_api_key
PORT=3000
團隊夥伴只需要將這個檔案複製成 .env,並填入實際值即可。
也可以在專案的 README.md 文件中,列出所有需要的環境變數
## 環境變數設定
- `DATABASE_HOST`: 資料庫主機名稱
- `DATABASE_USER`: 資料庫使用者名稱
- `DATABASE_PASSWORD`: 資料庫使用者密碼
- `API_KEY`: 用於外部 API 認證的金鑰
- `PORT`: 專案運行的本地端埠號
HW A
不錯,以下兩個小問題:
所有嗎?
怎麼測試 latency?
HW B
你有寫出 promise 版本的程式碼,那跟 callback 版本的差異是什麼?
HW C
readme 非常完整,很好喔!
問你一個小問題: .env 檔案不上傳到 github 是正確的,那要怎麼讓團隊夥伴或新進同事知道這個專案有哪些設定?
這週作業進步很多,進階題也都有做,繼續保持。
以上可以回覆在 issue 這裡即可,要不要改回去原檔案自行判斷,但我建議要,讓自己的作業是完整的。