[英]Chaining promises but with different parameters
以前,我為需要訪問mysql或txt文件的所有nodejs函數使用了回調。 這導致丑陋的代碼將回調相互堆疊在一起,因此我將它們轉換為Promise。 如何每次都將具有不同參數的承諾鏈接在一起?
我知道如何用.then()
鏈接它們,但我不知道每次都傳遞不同的參數。
app.get('/visual', function (request, response) {
loadTextFile('tables', function (measureList) {
loadTextFile('roles', function (roleList) {
// Do something with roleList and measureList
});
});
});
這是我的代碼在使用回調之前的樣子,如何將它們轉換為使用then()
? (我知道如何將loadTextFile轉換為Promise。)
開始使用async
- await
:
async function loadFiles() { const loadTextFilesTables = await loadTextFile('tables', measureList); const loadTextFilesRoles = await loadTextFile('roles', roleList); //... }
作為回調地獄和Promise.then.then
的另一種選擇,您還可以使用async / await:
const loadTextFile = file => new Promise( (resolve, reject) => { // Fetch the files etc. resolve(data); }) const loadFiles = async (request, response) => { const measureList = await loadTextFile('tables'); const roleList = await loadTextFile('roles'); // Do something with roleList and measureList response.send(finalData); } app.get('/visual', loadFiles);
正如其他人已經說過的那樣,您應該使用async / await,因為可讀性優於Promises /回調,但是我想補充一點,如果Promises彼此不依賴,則可以同時要求它們同時執行,而不是等待它們完成在使用Promise.all觸發下一個請求之前
const loadTextFile = file => new Promise((resolve, reject) => {
const fileData = getFileData(file);
resolve(data);
}
const loadFiles = async () => {
const [measureList, roleList] = await Promise.all([
loadTextFile('tables'),
loadTextFile('roles')
]);
};
如果您的意思是這樣的:
function multiply(a) {
return new Promise((resolve, reject) => {
resolve(a * a)
})
}
function promise1() {
return new Promise((resolve, reject) => {
resolve(5)
})
}
promise1.then(add).then(res => console.log(res))
那么答案是肯定的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.