Node.js NodeJS中的Promise-具有循环和多个调用

Node.js NodeJS中的Promise-具有循环和多个调用,node.js,promise,Node.js,Promise,下面是我尝试运行的代码。它是示例代码。我面临的问题是,不知何故,它没有按照我预期的顺序工作。由于这个原因,test1和test2同时进入脚本,并且把所有的脚本都搞乱了 let testmap = testDataArray.map((testdataContent) => { return new Promise((resolve, reject) => { console.log(testdataContent) logger.info

下面是我尝试运行的代码。它是示例代码。我面临的问题是,不知何故,它没有按照我预期的顺序工作。由于这个原因,test1和test2同时进入脚本,并且把所有的脚本都搞乱了

 let testmap = testDataArray.map((testdataContent) => {
      return new Promise((resolve, reject) => {
        console.log(testdataContent)
        logger.info(testdataContent + "to be stored");
        return service1.upload(testdataContent).then((testdataUpload) => {
          logger.info(testdataContent + " is stored ");
          logger.info(testdataContent + " to  be run on script");
          return service2.runScript(testdataContent).then((scriptresponse) => {
            logger.info(testDataName + " successfully run on script");
            resolve(scriptresponse);
          }).catch((err) => {
            reject(err);
          })
        }).catch((err) => {
          reject(err);
        })
      })
    })
    

Promise.all(testmap).then((res) => {
  console.log("Done all");
}).catch((err) => {
  console.log(err);
})
记录器类似于:

"Test1 to be Stored"
"Test2 to be stored"
"Test1 is stored"
"Test1 to be run on script"
"Test1 successfully run on script"
"Test 2 successfully run on script"
"Done all"
预期订单:

"Test1 to be Stored"
"Test1 is stored"
"Test1 to be run on script"
"Test1 successfully run on script"
"Test2 to be Stored"
"Test2 is stored"
"Test2 to be run on script"
"Test2 successfully run on script"
"Done all"

您可以在嵌套在异步函数中的for循环中顺序调用它

const run = async (arrOfPromises) => {
  try {
    for (const promise of arrOfPromises) {
      await promise
    }
    console.log('Done')
  } catch (err) {
    console.log(err)
  }
}

run(testmap)
完整代码

let testmap = testDataArray.map(testdataContent => {
  return new Promise((resolve, reject) => {
    console.log(testdataContent)
    logger.info(testdataContent + 'to be stored')
    return service1
      .upload(testdataContent)
      .then(testdataUpload => {
        logger.info(testdataContent + ' is stored ')
        logger.info(testdataContent + ' to  be run on script')
        return service2
          .runScript(testdataContent)
          .then(scriptresponse => {
            logger.info(testDataName + ' successfully run on script')
            resolve(scriptresponse)
          })
          .catch(err => {
            reject(err)
          })
      })
      .catch(err => {
        reject(err)
      })
  })
})

const run = async (arrOfPromises) => {
  try {
    for (const promise of arrOfPromises) {
      await promise
    }
    console.log('Done')
  } catch (err) {
    console.log(err)
  }
}

run(testmap)

在内部单独解决承诺(设i=0;i