链接承诺但具有不同的参数

Chaining promises but with different parameters

我以前对所有需要访问 mysql 或 txt 文件的 nodejs 函数使用回调。这导致丑陋的代码将回调函数堆叠在一起,所以我将它们转换为承诺。我如何链接承诺但每次都使用不同的参数?

我知道如何用 .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);
    //...
}

如果你的意思是这样的:

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))

那么答案是肯定的

作为回调地狱和 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 since the readability is superior to Promises / callbacks but i wanted to add that if your Promises doesn't depend on each other you can actually request them both simultaneity instead of waiting for one to finish before firing the next request using 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')
  ]);
};