Как использовать asyn c await для последовательного запуска итерации по массиву? - PullRequest
0 голосов
/ 15 марта 2020

Я хочу, чтобы итерации выполнялись по одной за раз и по порядку, чтобы емкость следующей итерации выбиралась только после завершения предыдущей итерации.

В настоящее время, поскольку итерации выполняются параллельно, Емкость каждой итерации выбирается до завершения предыдущих итераций. Поскольку емкость обновляется в конце каждой итерации, я хочу, чтобы это изменение было отражено в следующих итерациях.

Это может произойти, только если итерации выполняются последовательно.

mysqlConnection.query(
  "Select rollno, course_code_pref1, course_code_pref2, course_code_pref3         FROM preferencelist ORDER BY time",
  (err, result) => {
    if (!err) {
      if (result.length > 0) {
        //res.send(true);
        console.log(result.length);

        let flag = 0;
        for (let i = 0; i < result.length; i++) {
          let sem = 3;
          let dep;
          let roll;
          let cap = 1;
          let pref1;
          let pref2;
          let pref3;
          console.log(result[i]);
          roll = result[i].rollno;
          pref1 = result[i].course_code_pref1;
          pref2 = result[i].course_code_pref2;
          pref3 = result[i].course_code_pref3;
          console.log("Alotting for " + roll);
          //fetching department
          //mysqlConnection.query("SELECT ");
          dep = "CSE";

          //fetching semester

          mysqlConnection.query(
            "SELECT semester FROM students WHERE rollno = '" + roll + "'",
            (err, result) => {
              if (!err) {
                if (result.length > 0) {
                  sem = result[0].semester;
                  console.log(result);
                } else {
                  //res.send("Invalid rollnumber");
                  console.log("Invalid rollnumber");
                }
              } else {
                console.log(err);
              }
            }
          );

          //1st preference
          console.log(pref1);
          mysqlConnection.query(
            'SELECT capacity FROM electives WHERE department = "' +
              dep +
              '" AND (semester = 3 AND course_code = "' +
              pref1 +
              '")',
            (err, result) => {
              if (!err) {
                // res.send(true);
                console.log("I: " + i);
                console.log(result);
                cap = result[0].capacity;
                console.log(cap);

                if (cap > 0) {
                  cap = cap - 1;
                  console.log("ROLLLLL" + roll);
                  mysqlConnection.query(
                    'INSERT INTO allotment VALUES ("' +
                      roll +
                      '","' +
                      pref1 +
                      '")',
                    (err, result) => {
                      if (!err) {
                        //res.send(true);
                        console.log("Alloted" + roll + "," + pref1);

                        mysqlConnection.query(
                          "UPDATE electives SET capacity = '" +
                            cap +
                            "' WHERE department = \"" +
                            dep +
                            '" AND semester = 3 AND course_code = "' +
                            pref1 +
                            '"',
                          (err, result1) => {}
                        );

                        flag = 1;
                      } else {
                        //res.send(false);
                        console.log(err);
                      }
                    }
                  );
                } else {
                  //2nd preference
                  mysqlConnection.query(
                    'Select capacity from electives WHERE department = "' +
                      dep +
                      '" AND semester = 3 AND course_code = "' +
                      pref2 +
                      '"',
                    (err, result2) => {
                      if (!err) {
                        cap = result2[0].capacity;
                        // res.send(true);
                        console.log(cap);

                        if (cap > 0) {
                          cap = cap - 1;

                          mysqlConnection.query(
                            'INSERT INTO allotment VALUES ("' +
                              roll +
                              '","' +
                              pref2 +
                              '")',
                            (err, result) => {
                              if (!err) {
                                //res.send(true);
                                console.log("Alloted" + roll + "," + pref2);

                                mysqlConnection.query(
                                  "UPDATE electives SET capacity = '" +
                                    cap +
                                    "' WHERE department = \"" +
                                    dep +
                                    '" AND semester = 3 AND course_code = "' +
                                    pref2 +
                                    '"',
                                  (err, result2) => {}
                                );
                                flag = 1;
                              } else {
                                //res.send(false);
                                console.log(err);
                              }
                            }
                          );
                        } else {
                          //3rd preference
                          mysqlConnection.query(
                            'Select capacity from electives WHERE department = "' +
                              dep +
                              '" AND semester = 3 AND course_code = "' +
                              pref3 +
                              '"',
                            (err, result3) => {
                              if (!err) {
                                // res.send(true);
                                cap = result3[0].capacity;
                                console.log(cap);

                                if (cap > 0) {
                                  cap = cap - 1;

                                  mysqlConnection.query(
                                    'INSERT INTO allotment VALUES ("' +
                                      roll +
                                      '","' +
                                      pref3 +
                                      '")',
                                    (err, result) => {
                                      if (!err) {
                                        //res.send(true);
                                        console.log(
                                          "Alloted" + roll + "," + pref3
                                        );
                                        mysqlConnection.query(
                                          "UPDATE electives SET capacity = '" +
                                            cap +
                                            "' WHERE department = \"" +
                                            dep +
                                            '" AND semester = 3 AND course_code = "' +
                                            pref3 +
                                            '"',
                                          (err, result3) => {}
                                        );
                                        flag = 1;
                                      } else {
                                        //res.send(false);
                                        console.log(err);
                                      }
                                    }
                                  );
                                } else {
                                  //TO BE FILLED (all three preferences not available)
                                }
                              } else {
                                //res.send(false);
                                console.log("Error fetching capacity");
                              }
                            }
                          );
                        }
                      } else {
                        // res.send(false);
                        console.log("Error fetching capacity");
                      }
                    }
                  );
                }
              } else {
                //res.send(false);
                console.log("Error fetching capacity");
              }
            }
          );
        }
      } else {
        res.send(false);
        console.log("No preferences available!");
      }
    } else {
      res.send(false);
      console.log("Error fetching results");
    }
  }
);

1 Ответ

0 голосов
/ 15 марта 2020

Используйте обещание и asyn c -wait для выполнения итераций одна за другой

mysqlConnection.query(
    "Select rollno, course_code_pref1, course_code_pref2, course_code_pref3         FROM preferencelist ORDER BY time",
    async(err, result) => {
        if (!err) {
            if (result.length > 0) {
                //res.send(true);
                console.log(result.length);

                let flag = 0;
                for (let i = 0; i < result.length; i++) {
                    let sem = 3;
                    let dep;
                    let roll;
                    let cap = 1;
                    let pref1;
                    let pref2;
                    let pref3;
                    console.log(result[i]);
                    roll = result[i].rollno;
                    pref1 = result[i].course_code_pref1;
                    pref2 = result[i].course_code_pref2;
                    pref3 = result[i].course_code_pref3;
                    console.log("Alotting for " + roll);
                    //fetching department
                    //mysqlConnection.query("SELECT ");
                    dep = "CSE";

                    //fetching semester
                    await new Promise((resolve, reject) => {
                        mysqlConnection.query(
                            "SELECT semester FROM students WHERE rollno = '" + roll + "'",
                            (err, result) => {
                                if (!err) {
                                    if (result.length > 0) {
                                        sem = result[0].semester;
                                        console.log(result);
                                    } else {
                                        //res.send("Invalid rollnumber");
                                        console.log("Invalid rollnumber");
                                    }
                                    resolve();
                                } else {
                                    console.log(err);
                                    return reject(err)
                                }
                            }
                        );
                    })

                    //1st preference
                    console.log(pref1);
                    await new Promise((resolve, reject) => {
                        mysqlConnection.query(
                            'SELECT capacity FROM electives WHERE department = "' +
                            dep +
                            '" AND (semester = 3 AND course_code = "' +
                            pref1 +
                            '")',
                            async (err, result) => {
                                if (!err) {
                                    // res.send(true);
                                    console.log("I: " + i);
                                    console.log(result);
                                    cap = result[0].capacity;
                                    console.log(cap);

                                    if (cap > 0) {
                                        cap = cap - 1;
                                        console.log("ROLLLLL" + roll);
                                        mysqlConnection.query(
                                            'INSERT INTO allotment VALUES ("' +
                                            roll +
                                            '","' +
                                            pref1 +
                                            '")',
                                            (err, result) => {
                                                if (!err) {
                                                    //res.send(true);
                                                    console.log("Alloted" + roll + "," + pref1);

                                                    mysqlConnection.query(
                                                        "UPDATE electives SET capacity = '" +
                                                        cap +
                                                        "' WHERE department = \"" +
                                                        dep +
                                                        '" AND semester = 3 AND course_code = "' +
                                                        pref1 +
                                                        '"',
                                                        (err, result1) => { }
                                                    );

                                                    flag = 1;
                                                } else {
                                                    //res.send(false);
                                                    console.log(err);
                                                }
                                            }
                                        );
                                    } else {
                                        //2nd preference
                                        mysqlConnection.query(
                                            'Select capacity from electives WHERE department = "' +
                                            dep +
                                            '" AND semester = 3 AND course_code = "' +
                                            pref2 +
                                            '"',
                                            (err, result2) => {
                                                if (!err) {
                                                    cap = result2[0].capacity;
                                                    // res.send(true);
                                                    console.log(cap);

                                                    if (cap > 0) {
                                                        cap = cap - 1;

                                                        mysqlConnection.query(
                                                            'INSERT INTO allotment VALUES ("' +
                                                            roll +
                                                            '","' +
                                                            pref2 +
                                                            '")',
                                                            (err, result) => {
                                                                if (!err) {
                                                                    //res.send(true);
                                                                    console.log("Alloted" + roll + "," + pref2);

                                                                    mysqlConnection.query(
                                                                        "UPDATE electives SET capacity = '" +
                                                                        cap +
                                                                        "' WHERE department = \"" +
                                                                        dep +
                                                                        '" AND semester = 3 AND course_code = "' +
                                                                        pref2 +
                                                                        '"',
                                                                        (err, result2) => { }
                                                                    );
                                                                    flag = 1;
                                                                } else {
                                                                    //res.send(false);
                                                                    console.log(err);
                                                                }
                                                            }
                                                        );
                                                    } else {
                                                        //3rd preference
                                                        mysqlConnection.query(
                                                            'Select capacity from electives WHERE department = "' +
                                                            dep +
                                                            '" AND semester = 3 AND course_code = "' +
                                                            pref3 +
                                                            '"',
                                                            (err, result3) => {
                                                                if (!err) {
                                                                    // res.send(true);
                                                                    cap = result3[0].capacity;
                                                                    console.log(cap);

                                                                    if (cap > 0) {
                                                                        cap = cap - 1;

                                                                        mysqlConnection.query(
                                                                            'INSERT INTO allotment VALUES ("' +
                                                                            roll +
                                                                            '","' +
                                                                            pref3 +
                                                                            '")',
                                                                            (err, result) => {
                                                                                if (!err) {
                                                                                    //res.send(true);
                                                                                    console.log(
                                                                                        "Alloted" + roll + "," + pref3
                                                                                    );
                                                                                    mysqlConnection.query(
                                                                                        "UPDATE electives SET capacity = '" +
                                                                                        cap +
                                                                                        "' WHERE department = \"" +
                                                                                        dep +
                                                                                        '" AND semester = 3 AND course_code = "' +
                                                                                        pref3 +
                                                                                        '"',
                                                                                        (err, result3) => { }
                                                                                    );
                                                                                    flag = 1;
                                                                                } else {
                                                                                    //res.send(false);
                                                                                    console.log(err);
                                                                                }
                                                                            }
                                                                        );
                                                                    } else {
                                                                        //TO BE FILLED (all three preferences not available)
                                                                    }
                                                                } else {
                                                                    //res.send(false);
                                                                    console.log("Error fetching capacity");
                                                                }
                                                            }
                                                        );
                                                    }
                                                } else {
                                                    // res.send(false);
                                                    console.log("Error fetching capacity");
                                                }
                                            }
                                        );
                                    }
                                    return resolve();
                                } else {
                                    //res.send(false);
                                    console.log("Error fetching capacity");
                                    return reject(err);
                                }
                            }
                        );
                    })

                }
            } else {
                res.send(false);
                console.log("No preferences available!");
            }
        } else {
            res.send(false);
            console.log("Error fetching results");
        }
    }
);
...