Почему функция Zapier SetTimeout не работает? - PullRequest
0 голосов
/ 21 октября 2019

Я использую Zapier Code (Javascript) для вызова стороннего API для конвертации валют. Каждый раз, когда я нажимаю Zap, он выполняет около 40 вызовов API.

Я использую setTimeout для задержки и проверки доступности значений, а вызовы API завершены, прежде чем я отправлю значения на следующий шаг черезпеременная вывода для Zapier, но кажется, что они игнорируются ... Все действие zapier выполняется за 384 миллисекунды.

Я говорил с Zapier и мне сказали, что они поддерживают setTimeout. Что я делаю неправильно? Я не могу понять ...:)

** ОБНОВЛЕНО В ОТВЕТЕ НИЖЕ

//This code runs API calls for all Amount, OOP and GM currency conversions.
//* Note - Timeout is used to allow the API calls to finish and ensure those results are set and available before setting the final Zapier output values.

var fromAmt;
var fromOOP;
var fromGM;
var fromCur = inputData.currency;

//set input values from Zapier and replace with "0" if null

if (inputData.amount == null){fromAmt = 0;}
if (inputData.outofpocket == null){fromOOP = 0;}
if (inputData.gm == null){fromGM = 0;}

var toCur = ["USD", "EUR", "INR", "GBP", "SGD", "AUD", "CNY", "HKD", "ARS", "AED", "MXN", "NZD", "BRL", "CAD", "SEK", "COP"];

var dAmt = {"USD":10,"EUR":0,"INR":0,"GBP":0,"SGD":0,"AUD":0, "CNY":0, "HKD":0, "ARS":0, "AED":0, "MXN":0, "NZD":0, "BRL":0, "CAD":0, "SEK":0, "COP":0};
var dOOP = {"USD":0,"EUR":0,"INR":0,"GBP":0,"SGD":0,"AUD":0, "CNY":0, "HKD":0, "ARS":0, "AED":0, "MXN":0, "NZD":0, "BRL":0, "CAD":0, "SEK":0, "COP":0};
var dGM = {"USD":0,"EUR":0,"INR":0,"GBP":0,"SGD":0,"AUD":0, "CNY":0, "HKD":0, "ARS":0, "AED":0, "MXN":0, "NZD":0, "BRL":0, "CAD":0, "SEK":0, "COP":0};

output = [{amtUSD: 0,
             amtEUR: 0,
             amtINR: 0,
             amtGBP: 0,
             amtSGD: 0,
             amtAUD: 0,
             amtCNY: 0,
             amtHKD: 0,
             amtARS: 0,
             amtAED: 0,
             amtMXN: 0,
             amtNZD: 0,
             amtBRL: 0,
             amtCAD: 0,
             amtSEK: 0,
             amtCOP: 0,
             oopUSD: 0,
             oopEUR: 0,
             oopINR: 0,
             oopGBP: 0,
             oopSGD: 0,
             oopAUD: 0,
             oopCNY: 0,
             oopHKD: 0,
             oopARS: 0,
             oopAED: 0,
             oopMXN: 0,
             oopNZD: 0,
             oopBRL: 0,
             oopCAD: 0,
             oopSEK: 0,
             oopCOP: 0,
             gmUSD: 0,
             gmEUR: 0,
             gmINR: 0,
             gmGBP: 0,
             gmSGD: 0,
             gmAUD: 0,
             gmCNY: 0,
             gmHKD: 0,
             gmARS: 0,
             gmAED: 0,
             gmMXN: 0,
             gmNZD: 0,
             gmBRL: 0,
             gmCAD: 0,
             gmSEK: 0,
             gmCOP: 0,}];

function setOutput()
{
  output["amtUSD"] = dAmt["USD"];
             output["amtEUR"] = dAmt["EUR"];
             output["amtINR"] = dAmt["INR"];
             output["amtGBP"] = dAmt["GBP"];
             output["amtSGD"] = dAmt["SGD"];
             output["amtAUD"] = dAmt["AUD"];
             output["amtCNY"] = dAmt["CNY"];
             output["amtHKD"] = dAmt["HKD"];
             output["amtARS"] = dAmt["ARS"];
             output["amtAED"] = dAmt["AED"];
             output["amtMXN"] = dAmt["MXN"];
             output["amtNZD"] = dAmt["NZD"];
             output["amtBRL"] = dAmt["BRL"];
             output["amtCAD"] = dAmt["CAD"];
             output["amtSEK"] = dAmt["SEK"];
             output["amtCOP"] = dAmt["COP"];
             output["oopUSD"] = dOOP["USD"];
             output["oopEUR"] = dOOP["EUR"];
             output["oopINR"] = dOOP["INR"];
             output["oopGBP"] = dOOP["GBP"];
             output["oopSGD"] = dOOP["SGD"];
             output["oopAUD"] = dOOP["AUD"];
             output["oopCNY"] = dOOP["CNY"];
             output["oopHKD"] = dOOP["HKD"];
             output["oopARS"] = dOOP["ARS"];
             output["oopAED"] = dOOP["AED"];
             output["oopMXN"] = dOOP["MXN"];
             output["oopNZD"] = dOOP["NZD"];
             output["oopBRL"] = dOOP["BRL"];
             output["oopCAD"] = dOOP["CAD"];
             output["oopSEK"] = dOOP["SEK"];
             output["oopCOP"] = dOOP["COP"];
             output["gmUSD"] = dGM["USD"];
             output["gmEUR"] = dGM["EUR"];
             output["gmINR"] = dGM["INR"];
             output["gmGBP"] = dGM["GBP"];
             output["gmSGD"] = dGM["SGD"];
             output["gmAUD"] = dGM["AUD"];
             output["gmCNY"] = dGM["CNY"];
             output["gmHKD"] = dGM["HKD"];
             output["gmARS"] = dGM["ARS"];
             output["gmAED"] = dGM["AED"];
             output["gmMXN"] = dGM["MXN"];
             output["gmNZD"] = dGM["NZD"];
             output["gmBRL"] = dGM["BRL"];
             output["gmCAD"] = dGM["CAD"];
             output["gmSEK"] = dGM["SEK"];
             output["gmCOP"] = dGM["COP"];
}

async function getConversionAsync(type, fcur, tcur, amt) {
  let response = await fetch('https://data.fixer.io/api/convert?access_key=xxx&from=' + fcur + '&to=' + tcur + '&amount=' + amt);
  let data = await response.json();
  if (type == "Amount"){
     dAmt[tcur] = await parseFloat(data.result.toString()).toFixed(2);
     }
  else if (type == "OOP"){
    dOOP[tcur] = await parseFloat(data.result.toString()).toFixed(2);
    }
  else if (type == "GM"){
    dGM[tcur] = await parseFloat(data.result.toString()).toFixed(2);
    }
}

function getConvertedAmounts(fAmt,fOOP,fGM,cur){
  var i; 

  for (i=0; i < toCur.length; i++){
  getConversionAsync("Amount", cur,toCur[i],fAmt);
  }

  for (i=0; i < toCur.length; i++){
  getConversionAsync("OOP", cur,toCur[i],fOOP);
  }

  for (i=0; i < toCur.length; i++){
  getConversionAsync("GM", cur,toCur[i],fGM);
  }
}

getConvertedAmounts(fromAmt,fromOOP,fromGM,fromCur);

//In Zapier this is where we write the values out to the next function
setTimeout(function(){ setOutput(); }, 5000);

Ответы [ 3 ]

0 голосов
/ 22 октября 2019

Я попробовал приведенную выше идею и удалил все возможности повторного использования. Теперь это просто набор утверждений с ожидающими строками - которые, как я понимаю, будут выполнять их последовательно, верно?

В любом случае, действие завершается через 200 мс, что означает, что оно даже не ждет.

Когда яЗапустите этот код в обычной среде за пределами Zapier, он завершается нормально - для запуска всего требуется около 5 секунд.

Я что-то упустил еще? Предположим, я все еще не понимаю, ха-ха:)

//* Note - Timeout is used to allow the API calls to finish and ensure those results are set and available before setting the final Zapier output values.

var fromAmt;
var fromOOP;
var fromGM;
var fromCur = inputData.currency;

//set input values from Zapier and replace with "0" if null

if (inputData.amount == null){fromAmt = 0;}
if (inputData.outofpocket == null){fromOOP = 0;}
if (inputData.gm == null){fromGM = 0;}

var toCur = ["USD", "EUR", "INR", "GBP", "SGD", "AUD", "CNY", "HKD", "ARS", "AED", "MXN", "NZD", "BRL", "CAD", "SEK", "COP"];

var dAmt = {"USD":10,"EUR":0,"INR":0,"GBP":0,"SGD":0,"AUD":0, "CNY":0, "HKD":0, "ARS":0, "AED":0, "MXN":0, "NZD":0, "BRL":0, "CAD":0, "SEK":0, "COP":0};
var dOOP = {"USD":0,"EUR":0,"INR":0,"GBP":0,"SGD":0,"AUD":0, "CNY":0, "HKD":0, "ARS":0, "AED":0, "MXN":0, "NZD":0, "BRL":0, "CAD":0, "SEK":0, "COP":0};
var dGM = {"USD":0,"EUR":0,"INR":0,"GBP":0,"SGD":0,"AUD":0, "CNY":0, "HKD":0, "ARS":0, "AED":0, "MXN":0, "NZD":0, "BRL":0, "CAD":0, "SEK":0, "COP":0};

output = [{amtUSD: 0,
             amtEUR: 0,
             amtINR: 0,
             amtGBP: 0,
             amtSGD: 0,
             amtAUD: 0,
             amtCNY: 0,
             amtHKD: 0,
             amtARS: 0,
             amtAED: 0,
             amtMXN: 0,
             amtNZD: 0,
             amtBRL: 0,
             amtCAD: 0,
             amtSEK: 0,
             amtCOP: 0,
             oopUSD: 0,
             oopEUR: 0,
             oopINR: 0,
             oopGBP: 0,
             oopSGD: 0,
             oopAUD: 0,
             oopCNY: 0,
             oopHKD: 0,
             oopARS: 0,
             oopAED: 0,
             oopMXN: 0,
             oopNZD: 0,
             oopBRL: 0,
             oopCAD: 0,
             oopSEK: 0,
             oopCOP: 0,
             gmUSD: 0,
             gmEUR: 0,
             gmINR: 0,
             gmGBP: 0,
             gmSGD: 0,
             gmAUD: 0,
             gmCNY: 0,
             gmHKD: 0,
             gmARS: 0,
             gmAED: 0,
             gmMXN: 0,
             gmNZD: 0,
             gmBRL: 0,
             gmCAD: 0,
             gmSEK: 0,
             gmCOP: 0,}];

async function setOutput()
{
  output["amtUSD"] = await dAmt["USD"];
             output["amtEUR"] = await dAmt["EUR"];
             output["amtINR"] = await dAmt["INR"];
             output["amtGBP"] = await dAmt["GBP"];
             output["amtSGD"] = await dAmt["SGD"];
             output["amtAUD"] = await dAmt["AUD"];
             output["amtCNY"] = await dAmt["CNY"];
             output["amtHKD"] = await dAmt["HKD"];
             output["amtARS"] = await dAmt["ARS"];
             output["amtAED"] = await dAmt["AED"];
             output["amtMXN"] = await dAmt["MXN"];
             output["amtNZD"] = await dAmt["NZD"];
             output["amtBRL"] = await dAmt["BRL"];
             output["amtCAD"] = await dAmt["CAD"];
             output["amtSEK"] = await dAmt["SEK"];
             output["amtCOP"] = await dAmt["COP"];
             output["oopUSD"] = await dOOP["USD"];
             output["oopEUR"] = await dOOP["EUR"];
             output["oopINR"] = await dOOP["INR"];
             output["oopGBP"] = await dOOP["GBP"];
             output["oopSGD"] = await dOOP["SGD"];
             output["oopAUD"] = await dOOP["AUD"];
             output["oopCNY"] = await dOOP["CNY"];
             output["oopHKD"] = await dOOP["HKD"];
             output["oopARS"] = await dOOP["ARS"];
             output["oopAED"] = await dOOP["AED"];
             output["oopMXN"] = await dOOP["MXN"];
             output["oopNZD"] = await dOOP["NZD"];
             output["oopBRL"] = await dOOP["BRL"];
             output["oopCAD"] = await dOOP["CAD"];
             output["oopSEK"] = await dOOP["SEK"];
             output["oopCOP"] = await dOOP["COP"];
             output["gmUSD"] = await dGM["USD"];
             output["gmEUR"] = await dGM["EUR"];
             output["gmINR"] = await dGM["INR"];
             output["gmGBP"] = await dGM["GBP"];
             output["gmSGD"] = await dGM["SGD"];
             output["gmAUD"] = await dGM["AUD"];
             output["gmCNY"] = await dGM["CNY"];
             output["gmHKD"] = await dGM["HKD"];
             output["gmARS"] = await dGM["ARS"];
             output["gmAED"] = await dGM["AED"];
             output["gmMXN"] = await dGM["MXN"];
             output["gmNZD"] = await dGM["NZD"];
             output["gmBRL"] = await dGM["BRL"];
             output["gmCAD"] = await dGM["CAD"];
             output["gmSEK"] = await dGM["SEK"];
             output["gmCOP"] = await dGM["COP"];
  console.log("made it");
}


async function getConversionAsync() {
  var response;
  var data;

//convert Amounts

  response = await fetch('https://data.fixer.io/api/convert?access_key=31f3cee34159836fe0308d5d590e461d&from=' + fromCur + '&to=USD&amount=' + fromAmt);
  data = await response.json();
  dAmt["USD"] = await parseFloat(data.result.toString()).toFixed(2);

  response = await fetch('https://data.fixer.io/api/convert?access_key=31f3cee34159836fe0308d5d590e461d&from=' + fromCur + '&to=EUR&amount=' + fromAmt);
  data = await response.json();
  dAmt["EUR"] = await parseFloat(data.result.toString()).toFixed(2);

  response = await fetch('https://data.fixer.io/api/convert?access_key=31f3cee34159836fe0308d5d590e461d&from=' + fromCur + '&to=INR&amount=' + fromAmt);
  data = await response.json();
  dAmt["INR"] = await parseFloat(data.result.toString()).toFixed(2);

  response = await fetch('https://data.fixer.io/api/convert?access_key=31f3cee34159836fe0308d5d590e461d&from=' + fromCur + '&to=GBP&amount=' + fromAmt);
  data = await response.json();
  dAmt["GBP"] = await parseFloat(data.result.toString()).toFixed(2);

  response = await fetch('https://data.fixer.io/api/convert?access_key=31f3cee34159836fe0308d5d590e461d&from=' + fromCur + '&to=SGD&amount=' + fromAmt);
  data = await response.json();
  dAmt["SGD"] = await parseFloat(data.result.toString()).toFixed(2);

  response = await fetch('https://data.fixer.io/api/convert?access_key=31f3cee34159836fe0308d5d590e461d&from=' + fromCur + '&to=AUD&amount=' + fromAmt);
  data = await response.json();
  dAmt["AUD"] = await parseFloat(data.result.toString()).toFixed(2);

  response = await fetch('https://data.fixer.io/api/convert?access_key=31f3cee34159836fe0308d5d590e461d&from=' + fromCur + '&to=CNY&amount=' + fromAmt);
  data = await response.json();
  dAmt["CNY"] = await parseFloat(data.result.toString()).toFixed(2);

  response = await fetch('https://data.fixer.io/api/convert?access_key=31f3cee34159836fe0308d5d590e461d&from=' + fromCur + '&to=HKD&amount=' + fromAmt);
  data = await response.json();
  dAmt["HKD"] = await parseFloat(data.result.toString()).toFixed(2);

  response = await fetch('https://data.fixer.io/api/convert?access_key=31f3cee34159836fe0308d5d590e461d&from=' + fromCur + '&to=ARS&amount=' + fromAmt);
  data = await response.json();
  dAmt["ARS"] = await parseFloat(data.result.toString()).toFixed(2);

  response = await fetch('https://data.fixer.io/api/convert?access_key=31f3cee34159836fe0308d5d590e461d&from=' + fromCur + '&to=AED&amount=' + fromAmt);
  data = await response.json();
  dAmt["AED"] = await parseFloat(data.result.toString()).toFixed(2);

  response = await fetch('https://data.fixer.io/api/convert?access_key=31f3cee34159836fe0308d5d590e461d&from=' + fromCur + '&to=MXN&amount=' + fromAmt);
  data = await response.json();
  dAmt["MXN"] = await parseFloat(data.result.toString()).toFixed(2);

  response = await fetch('https://data.fixer.io/api/convert?access_key=31f3cee34159836fe0308d5d590e461d&from=' + fromCur + '&to=NZD&amount=' + fromAmt);
  data = await response.json();
  dAmt["NZD"] = await parseFloat(data.result.toString()).toFixed(2);

  response = await fetch('https://data.fixer.io/api/convert?access_key=31f3cee34159836fe0308d5d590e461d&from=' + fromCur + '&to=BRL&amount=' + fromAmt);
  data = await response.json();
  dAmt["BRL"] = await parseFloat(data.result.toString()).toFixed(2);

  response = await fetch('https://data.fixer.io/api/convert?access_key=31f3cee34159836fe0308d5d590e461d&from=' + fromCur + '&to=CAD&amount=' + fromAmt);
  data = await response.json();
  dAmt["CAD"] = await parseFloat(data.result.toString()).toFixed(2);

  response = await fetch('https://data.fixer.io/api/convert?access_key=31f3cee34159836fe0308d5d590e461d&from=' + fromCur + '&to=CNY&amount=' + fromAmt);
  data = await response.json();
  dAmt["CNY"] = await parseFloat(data.result.toString()).toFixed(2);

  //convert OOP

  response = await fetch('https://data.fixer.io/api/convert?access_key=31f3cee34159836fe0308d5d590e461d&from=' + fromCur + '&to=USD&amount=' + fromOOP);
  data = await response.json();
  dOOP["USD"] = await parseFloat(data.result.toString()).toFixed(2);

  response = await fetch('https://data.fixer.io/api/convert?access_key=31f3cee34159836fe0308d5d590e461d&from=' + fromCur + '&to=EUR&amount=' + fromOOP);
  data = await response.json();
  dOOP["EUR"] = await parseFloat(data.result.toString()).toFixed(2);

  response = await fetch('https://data.fixer.io/api/convert?access_key=31f3cee34159836fe0308d5d590e461d&from=' + fromCur + '&to=INR&amount=' + fromOOP);
  data = await response.json();
  dOOP["INR"] = await parseFloat(data.result.toString()).toFixed(2);

  response = await fetch('https://data.fixer.io/api/convert?access_key=31f3cee34159836fe0308d5d590e461d&from=' + fromCur + '&to=GBP&amount=' + fromOOP);
  data = await response.json();
  dOOP["GBP"] = await parseFloat(data.result.toString()).toFixed(2);

  response = await fetch('https://data.fixer.io/api/convert?access_key=31f3cee34159836fe0308d5d590e461d&from=' + fromCur + '&to=SGD&amount=' + fromOOP);
  data = await response.json();
  dOOP["SGD"] = await parseFloat(data.result.toString()).toFixed(2);

  response = await fetch('https://data.fixer.io/api/convert?access_key=31f3cee34159836fe0308d5d590e461d&from=' + fromCur + '&to=AUD&amount=' + fromOOP);
  data = await response.json();
  dOOP["AUD"] = await parseFloat(data.result.toString()).toFixed(2);

  response = await fetch('https://data.fixer.io/api/convert?access_key=31f3cee34159836fe0308d5d590e461d&from=' + fromCur + '&to=CNY&amount=' + fromOOP);
  data = await response.json();
  dAmt["CNY"] = await parseFloat(data.result.toString()).toFixed(2);

  response = await fetch('https://data.fixer.io/api/convert?access_key=31f3cee34159836fe0308d5d590e461d&from=' + fromCur + '&to=HKD&amount=' + fromOOP);
  data = await response.json();
  dOOP["HKD"] = await parseFloat(data.result.toString()).toFixed(2);

  response = await fetch('https://data.fixer.io/api/convert?access_key=31f3cee34159836fe0308d5d590e461d&from=' + fromCur + '&to=ARS&amount=' + fromOOP);
  data = await response.json();
  dOOP["ARS"] = await parseFloat(data.result.toString()).toFixed(2);

  response = await fetch('https://data.fixer.io/api/convert?access_key=31f3cee34159836fe0308d5d590e461d&from=' + fromCur + '&to=AED&amount=' + fromOOP);
  data = await response.json();
  dOOP["AED"] = await parseFloat(data.result.toString()).toFixed(2);

  response = await fetch('https://data.fixer.io/api/convert?access_key=31f3cee34159836fe0308d5d590e461d&from=' + fromCur + '&to=MXN&amount=' + fromOOP);
  data = await response.json();
  dOOP["MXN"] = await parseFloat(data.result.toString()).toFixed(2);

  response = await fetch('https://data.fixer.io/api/convert?access_key=31f3cee34159836fe0308d5d590e461d&from=' + fromCur + '&to=NZD&amount=' + fromOOP);
  data = await response.json();
  dOOP["NZD"] = await parseFloat(data.result.toString()).toFixed(2);

  response = await fetch('https://data.fixer.io/api/convert?access_key=31f3cee34159836fe0308d5d590e461d&from=' + fromCur + '&to=BRL&amount=' + fromOOP);
  data = await response.json();
  dOOP["BRL"] = await parseFloat(data.result.toString()).toFixed(2);

  response = await fetch('https://data.fixer.io/api/convert?access_key=31f3cee34159836fe0308d5d590e461d&from=' + fromCur + '&to=CAD&amount=' + fromOOP);
  data = await response.json();
  dOOP["CAD"] = await parseFloat(data.result.toString()).toFixed(2);

  response = await fetch('https://data.fixer.io/api/convert?access_key=31f3cee34159836fe0308d5d590e461d&from=' + fromCur + '&to=CNY&amount=' + fromOOP);
  data = await response.json();
  dOOP["CNY"] = await parseFloat(data.result.toString()).toFixed(2);

    //convert GM

  response = await fetch('https://data.fixer.io/api/convert?access_key=31f3cee34159836fe0308d5d590e461d&from=' + fromCur + '&to=USD&amount=' + fromGM);
  data = await response.json();
  dGM["USD"] = await parseFloat(data.result.toString()).toFixed(2);

  response = await fetch('https://data.fixer.io/api/convert?access_key=31f3cee34159836fe0308d5d590e461d&from=' + fromCur + '&to=EUR&amount=' + fromGM);
  data = await response.json();
  dGM["EUR"] = await parseFloat(data.result.toString()).toFixed(2);

  response = await fetch('https://data.fixer.io/api/convert?access_key=31f3cee34159836fe0308d5d590e461d&from=' + fromCur + '&to=INR&amount=' + fromGM);
  data = await response.json();
  dGM["INR"] = await parseFloat(data.result.toString()).toFixed(2);

  response = await fetch('https://data.fixer.io/api/convert?access_key=31f3cee34159836fe0308d5d590e461d&from=' + fromCur + '&to=GBP&amount=' + fromGM);
  data = await response.json();
  dGM["GBP"] = await parseFloat(data.result.toString()).toFixed(2);

  response = await fetch('https://data.fixer.io/api/convert?access_key=31f3cee34159836fe0308d5d590e461d&from=' + fromCur + '&to=SGD&amount=' + fromGM);
  data = await response.json();
  dGM["SGD"] = await parseFloat(data.result.toString()).toFixed(2);

  response = await fetch('https://data.fixer.io/api/convert?access_key=31f3cee34159836fe0308d5d590e461d&from=' + fromCur + '&to=AUD&amount=' + fromGM);
  data = await response.json();
  dOOP["AUD"] = await parseFloat(data.result.toString()).toFixed(2);

  response = await fetch('https://data.fixer.io/api/convert?access_key=31f3cee34159836fe0308d5d590e461d&from=' + fromCur + '&to=CNY&amount=' + fromGM);
  data = await response.json();
  dGM["CNY"] = await parseFloat(data.result.toString()).toFixed(2);

  response = await fetch('https://data.fixer.io/api/convert?access_key=31f3cee34159836fe0308d5d590e461d&from=' + fromCur + '&to=HKD&amount=' + fromGM);
  data = await response.json();
  dGM["HKD"] = await parseFloat(data.result.toString()).toFixed(2);

  response = await fetch('https://data.fixer.io/api/convert?access_key=31f3cee34159836fe0308d5d590e461d&from=' + fromCur + '&to=ARS&amount=' + fromGM);
  data = await response.json();
  dGM["ARS"] = await parseFloat(data.result.toString()).toFixed(2);

  response = await fetch('https://data.fixer.io/api/convert?access_key=31f3cee34159836fe0308d5d590e461d&from=' + fromCur + '&to=AED&amount=' + fromGM);
  data = await response.json();
  dGM["AED"] = await parseFloat(data.result.toString()).toFixed(2);

  response = await fetch('https://data.fixer.io/api/convert?access_key=31f3cee34159836fe0308d5d590e461d&from=' + fromCur + '&to=MXN&amount=' + fromGM);
  data = await response.json();
  dOOP["MXN"] = await parseFloat(data.result.toString()).toFixed(2);

  response = await fetch('https://data.fixer.io/api/convert?access_key=31f3cee34159836fe0308d5d590e461d&from=' + fromCur + '&to=NZD&amount=' + fromGM);
  data = await response.json();
  dOOP["NZD"] = await parseFloat(data.result.toString()).toFixed(2);

  response = await fetch('https://data.fixer.io/api/convert?access_key=31f3cee34159836fe0308d5d590e461d&from=' + fromCur + '&to=BRL&amount=' + fromGM);
  data = await response.json();
  dGM["BRL"] = await parseFloat(data.result.toString()).toFixed(2);

  response = await fetch('https://data.fixer.io/api/convert?access_key=31f3cee34159836fe0308d5d590e461d&from=' + fromCur + '&to=CAD&amount=' + fromGM);
  data = await response.json();
  dGM["CAD"] = await parseFloat(data.result.toString()).toFixed(2);

  response = await fetch('https://data.fixer.io/api/convert?access_key=31f3cee34159836fe0308d5d590e461d&from=' + fromCur + '&to=CNY&amount=' + fromGM);
  data = await response.json();
  dGM["CNY"] = await parseFloat(data.result.toString()).toFixed(2);

  await setOutput()
}

getConversionAsync();```


0 голосов
/ 22 октября 2019

Несколько баллов:

  1. Не использовать setTimeout(). Вы можете только догадываться по времени ожидания. 5000 или что-то еще может быть слишком длинным или слишком коротким. Довольно просто разрешить обещания, возвращаемые fetch() и response.json(), определять время - без догадок.

  2. Разрешить вашим функциям принимать параметры и возвращать результаты. При этом функции вызывающей стороны могут напрямую работать с возвращаемыми значениями / объектами и внешними элементами, например, dAmt, dOOP, dGM, fAmt, fOOP, fGM;большинство из них станут внутренними членами getConvertedAmounts().

  3. Поскольку getConversionAsync является асинхронным, а getConvertedAmounts() вызывает getConversionAsync(), getConvertedAmounts() также (по определению) асинхронным.

  4. Нет необходимости инициализировать output. Обработка ошибок в getConversionAsync() может использоваться для установки значений по умолчанию для преобразований в случае сбоя любого из вызовов fetch().

  5. Заполнение output может быть процедурно обработано за несколькостроки кода.

Вы можете получить что-то вроде этого:

function setOutput(dAmt, dOOP, dGM) {
    let output = {};
    Object.keys(dAmt).forEach(function(key) {
        output["amt" + key] = dAmt[key];
    });
    Object.keys(dOOP).forEach(function(key) {
        output["oop" + key] = dOOP[key];
    });
    Object.keys(dGM).forEach(function(key) {
        output["gm" + key] = dGM[key];
    });
    return output;
}
async function getConversionAsync(fcur, tcur, amt) {
    try {
        let response = await fetch(`https://data.fixer.io/api/convert?access_key=xxx&from=${fcur}&to=${tcur}&amount=${amt}`);
        let data = await response.json();
        return parseFloat(data.result.toString()).toFixed(2);
    }
    catch(error) {
        console.log(error); // optional
        return 0; // or maybe return -1 to signify an error?
    }
}
async function getConvertedAmounts(inputData) {
    let fAmt = inputData.amount || 0;
    let fOOP = inputData.outofpocket || 0;
    let fGM = inputData.gm || 0;
    let cur = inputData.currency;
    let toCur = ["USD", "EUR", "INR", "GBP", "SGD", "AUD", "CNY", "HKD", "ARS", "AED", "MXN", "NZD", "BRL", "CAD", "SEK", "COP"];
    let dAmt = {};
    let dOOP = {};
    let dGM = {};
    for (const curCode of toCur) {
        dAmt[curCode] = await getConversionAsync(cur, curCode, fAmt);
        dOOP[curCode] = await getConversionAsync(cur, curCode, fOOP);
        dGM[curCode] = await getConversionAsync(cur, curCode, fGM);
    }
    return setOutput(dAmt, dOOP, dGM);
}
getConvertedAmounts(inputData)
.then(output => {
    // do whatever is necessary with output
})
.catch(error => {
    // something went wrong
});
0 голосов
/ 21 октября 2019

Основная проблема в том, что setTimeout не работает так, как вы ожидаете. Попробуйте запустить это в интерпретаторе JS:

const st = () => {
    setTimeout(()=>console.log('done'), 3000)
    return 3
}

st()

3 печатается сразу, а затем через 3 секунды (если переводчик все еще активен, печатается 'done'. Это потому, что setTimeout не делает 'Выполнение блока t - оно просто ставит в очередь действие (результат обратного вызова) через n секунд. В этом ответе больше информации.

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


Чтобы это исправить, вам нужно await ваши getConversionAsync вызовы. Но у вас есть ограниченное время на выполнение Zapier, поэтому вы захотитеделайте как можно больше запросов параллельно.

Для этого сделайте большой массив обещаний и оберните их все в Promise.all. Я не уверен, что у вас не останется времени, ноthat'lЯ, по крайней мере, заставлю вас катиться в правильном направлении.

...