繁体   English   中英

如何在映射函数中使用 async 和 await 进行顺序执行

[英]How to use async and await inside a map function for sequential executing

嗨对我来说 async 和 await 是安静的新。我有需要 await 方法的函数调用,因此我需要使用 async 和 await。 我得到了这些值,但它们不是按顺序排列的。

下面是我的异步和等待地图功能

items.map(async (item) =>{
const itemx = await  
   Promise.all([w.getFileByServerRelativeUrl(item.FieldValuesAsText.FileRef).getItem()]);
  var likes = await Promise.all(itemx.getLikedByInformation());
  const comments = await Promise.all(itemx.comments.get());      
  articles[i].likecount = likes.likeCount
  articles[i].commentcount = comments.length
  articles[i].FileRef = item.FieldValuesAsText.FileRef
  newst.push(articles[i++])
  })

任何建议都会很有帮助

您必须等待 map 函数的承诺才能按顺序获得结果。

async function main() {
  const items = []; // Fill your items
  const articles = []; // Fill your articles

  // Async map function return promise for each item
  const promises = items.map(async (item, i) => {
    console.log(item.FieldValuesAsText.FileRef);
    const itemx = await Promise.all([
      w.getFileByServerRelativeUrl(item.FieldValuesAsText.FileRef).getItem()
    ]);

    console.log(item);
    var likes;
    likes = await Promise.all(itemx.getLikedByInformation());
    console.log("like " + likes.likeCount);
    const comments = await Promise.all(itemx.comments.get());
    console.log("Comments Count " + comments.length);

    // Create new object by appending articles[i],likes,comments
    return {
      ...articles[i],
      likecount: likes.likeCount,
      commentcount: comments.length,
      FileRef: item.FieldValuesAsText.FileRef
    };
  });

  // Here you have everything in order.
  const newst = await Promise.all(promises);
}

每个映射项函数都是异步运行的,因此无法保证映射函数内部的顺序,但是您可以从映射函数返回值,该值可以通过使用await Promise.all()解析为有序数组,因为由map 函数的顺序正确。

尝试使用 Promise.mapSeries 进行异步等待的顺序访问。

 async function main() {

 const items = []; // Fill your items
  const articles = []; // Fill your articles

  await Promise.mapseries( items, async (item, i) => {
    const itemx = await      

 Promise.all([w.getFileByServerRelativeUrl(item.FieldValuesAsText.FileRef).getItem()]);


  console.log(item);
  var likes
  likes = await Promise.all(itemx.getLikedByInformation());
 console.log("like " + likes.likeCount);
  const comments = await Promise.all(itemx.comments.get());
  console.log("Comments Count " + comments.length);


  //articles[i] = articles[i]+likes+comments
  articles[i].likecount = likes.likeCount
  articles[i].commentcount = comments.length
  articles[i].FileRef = item.FieldValuesAsText.FileRef
  console.log(articles[i])

  newst.push(articles[i++])
  console.log(newst)
  j++
  })

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM