困惑于如何使用.then()使用promise链接查询

WHO*_*LES 6 javascript node.js promise ecmascript-6

我只是似乎无法用诺言来围绕链接查询。最让我感到困惑的是.then(function(doSomething)部分。

我应该在函数中添加什么(doSomething)?它是做什么的?

有人可以在不使用Promise.all而是使用.then()的情况下为我链接这些查询吗?所以我可以从中学到

SELECT * FROM books where book_id = $1

SELECT * FROM username where username = $2

SELECT * FROM saved where saved_id = $3
Run Code Online (Sandbox Code Playgroud)

Jac*_*ord 5

function(doSomething)当先前的承诺成功完成,并运行doSomething是响应。您可以使用以下方式链接承诺then

query("SELECT * FROM books where book_id = $1")
  .then(() => query("SELECT * FROM username where username = $2"))
  .then(() => query("SELECT * FROM saved where saved_id = $3"));
Run Code Online (Sandbox Code Playgroud)

这将依次执行三个SQL查询。

但是,由于您很可能希望保存响应,因此可以使用async/await以下方法:

async function threeQueries() {

  //Fetch all three queries in sequence
  let queryOne = await query("SELECT * FROM books where book_id = $1");
  let queryTwo = await query("SELECT * FROM username where username = $2");
  let queryThree = await query("SELECT * FROM saved where saved_id = $3");

  //Extract the response text from our queries
  let resultOne = await queryOne.text();
  let resultTwo = await queryTwo.text();
  let resultThree = await queryThree.text();

  //Return the responses from the function
  return [resultOne, resultTwo, resultThree];

}
Run Code Online (Sandbox Code Playgroud)

您也可以Promise.all这样使用:

Promise.all([
  query("SELECT * FROM books where book_id = $1"), 
  query("SELECT * FROM username where username = $2"), 
  query("SELECT * FROM saved where saved_id = $3")
]);
Run Code Online (Sandbox Code Playgroud)