我創建了一個帶有回傳余額的子函式的簡單函式,您可以添加一個金額來更新您的余額。
const bankAccount = (initialBalance) => {
let balance = initialBalance;
return {
getBalance: function() {
return balance;
},
deposit: function(amount) {
balance = amount;
return balance;
},
};
};
const account = bankAccount(100);
account.getBalance();
account.deposit(10);
我的問題是我想讓這個函式異步,我的問題是應該將總體函式包裝在一個 Promise 中,還是將子函式包裝在一個 Promise 中。
這就是我想的那種方法。這個對嗎?
async function bankAccount(initialBalance) {
let balance = initialBalance;
return await new Promise((resolve, reject) => {
if ("some error") {
reject("something went wrong");
}
return {
getBalance: function () {
resolve(balance);
},
deposit: function (amount) {
balance = amount;
resolve(balance);
},
};
});
}
uj5u.com熱心網友回復:
這是您可以使用異步存款和余額方法執行此操作的一種方法。我使用 sleep 方法模擬了異步呼叫,該方法在 2 秒后觸發回應。
function sleep(retval, ms = 2000) {
return new Promise(function (resolve, reject) {
setTimeout(() => {
resolve(retval);
}, ms);
});
}
const bankAccount = (initialBalance) => {
let balance = initialBalance;
return {
getBalance: async () => sleep(balance),
deposit: async (amount) => {
balance = amount;
return sleep(balance);
},
};
};
// An async IIFE, needed unless we have top-level await support
(async () => {
const account = bankAccount(100);
console.log("Initial balance:", await account.getBalance());
console.log("Deposit 10, new balance:", await account.deposit(10));
console.log("Deposit 10, new balance:", await account.deposit(10));
})();
uj5u.com熱心網友回復:
沒錯,這是使用 Promise 的正確方法,您只需在以下代碼中修復了一些細節
async function bankAccount(initialBalance) {
return await new Promise((resolve, reject) => {
let balance = initialBalance;
if ("some error") {
reject("something went wrong");
}
return {
getBalance: function () {
resolve(balance);
},
deposit: function (amount) {
balance = amount;
resolve(balance);
},
};
});
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/531050.html
下一篇:如何在回圈中命令Ajax呼叫
