【问题标题】:how to populate async call from inside another如何从另一个内部填充异步调用
【发布时间】:2023-01-11 00:10:30
【问题描述】:

我有一个进行多个 API 调用的脚本,一个调用的结果会影响其他调用。

async function getPlugin(id){
  const fetchCardPlugin = `https://*********..amazonaws.com/*****/cardPlugin?id=${id}`
  const cp = await fetch(fetchCardPlugin)
  let pluginData = await cp.text();
  pluginData = JSON.parse(pluginData);
  if (typeof pluginData[0] != undefined){
    return pluginData[0]['value'].split(':').pop().split('')[0]
  }
  else {
    return ''
  }
}

elm.addEventListener('click',()=>{
    return t.get('board','shared','bid')
        .then(data=>{
            (async function(){
        const sheetId = data;
        const cardList = [];
        const mm = {};

        const fetchCardData = `https://*******.execute-api.******.amazonaws.com/******/cardData?id=${boardId}`
     
        const cd = await fetch(fetchCardData)
        let cardData = await cd.text();
 
        cardData = JSON.parse(cardData);
              
        await cardData.map(x=>{
          const cardDict = {};
          // console.log(getPlugin(x.shortLink));
          cardDict['points'] = getPlugin(x.shortLink);
          cardDict['id'] = x.id;
          cardDict['title'] = x.name;
          
        })

我的第一个电话打到我的fetchCardData。然后我使用这个返回的数据来创建一个对象,并进行另一个调用。

await cardData.map(x=>{
          const cardDict = {};
          // console.log(getPlugin(x.shortLink));
cardDict['points'] = getPlugin(x.shortLink);
          cardDict['id'] = x.id;

我的主要症结在于,我需要使用第二次调用的数据来填充对象。目前,当我这样做时,我得到一个 Promise 作为对象点值。

comments:0
description:""
id:"6354b75ddared4ba013aa06440"
labels:""
last activity:"Sat Oct 22 2022"
list:"To Do"
members:""
points:Promise
[[Prototype]]:Promise
[[PromiseState]]:"fulfilled"
[[PromiseResult]]:"5"
title:"test"
url:"https://trello.com/c/*******/**"

我想要的是:

comments:0
description:""
id:"6354b75ddared4ba013aa06440"
labels:""
last activity:"Sat Oct 22 2022"
list:"To Do"
members:""
points:5
title:"test"
url:"https://trello.com/c/*******/**"

【问题讨论】:

    标签: javascript


    【解决方案1】:
    const cardListPromises = cardData.map(async (x) => {
      const cardDict = {};
      cardDict['points'] = await getPlugin(x.shortLink);
      cardDict['id'] = x.id;
      cardDict['title'] = x.name;
      
      return cardDict;
    })
    
    const cardList = await Promise.all(cardListPromises);
    
    console.log(cardList) // this is the final result you need.
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-27
      • 2022-12-08
      • 1970-01-01
      • 2020-03-04
      • 2016-12-31
      • 1970-01-01
      • 2018-09-06
      • 1970-01-01
      相关资源
      最近更新 更多