多个承诺在 NodeJS 中实现并保存

Multiple promises fulfilled and saved in NodeJS

我有这部分代码可以工作,但奇怪的是,输出结果的最新步骤不起作用。当我尝试记录数组的第一个元素时,它 returns 未定义 因为执行是异步的。我想构建一系列嵌套回调,但 我认为这是一种不好的做法。有没有其他方法可以在不创建嵌套承诺回调的情况下使其工作?

代码:

  var ImgGalleyURL = [];
  //CONTROLLO SE SONO STATE INSERITE IMMAGINI DA CARICARE E LE CARICO
  if (postwp.postImgGallery1 != null && postwp.postImgGallery1 != "") {
    msg.createMedia(postwp.postImgGallery1).then((imgURL)=>ImgGalleyURL.push(imgURL));
  }
  if (postwp.postImgGallery2 != null && postwp.postImgGallery2 != "") {
    msg.createMedia(postwp.postImgGallery2).then((imgURL)=>ImgGalleyURL.push(imgURL));
  }
  if (postwp.postImgGallery3 != null && postwp.postImgGallery3 != "") {
    msg.createMedia(postwp.postImgGallery3).then((imgURL)=>ImgGalleyURL.push(imgURL));
  }
  if (postwp.postImgGallery4 != null && postwp.postImgGallery4 != "") {
    msg.createMedia(postwp.postImgGallery4).then((imgURL)=>ImgGalleyURL.push(imgURL));
  }
  if (postwp.postImgGallery5 != null && postwp.postImgGallery5 != "") {
    msg.createMedia(postwp.postImgGallery5).then((imgURL)=>ImgGalleyURL.push(imgURL));
  }
  console.log(ImgGalleyURL[0] + "this is the first image loaded");

谢谢大家

我想你在找 Promise.race:

const promises = [];
for (let i=1; i<=5; i++) {
  const propName = "postImgGallery" + i;
  if (postwp[propName] != null && postwp[propName] != "") {
    promises.push(msg.createMedia(postwp[propName]));
  }
}
Promise.race(promises).then(firstUrl => {
  console.log(firstUrl + "this is the first image loaded");
});
Promise.all(promises).then(imgGalleryURLs => {
  console.log("All images ("+ imgGalleryURLs.join(", ") + ") loaded");
});

当 none 的承诺尚未实现时,您正试图记录数组的第一个值,因此它仍然是空的。