簡體   English   中英

鏈接承諾,但參數不同

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM