Saya perlu menunggu dua panggilan api selesai sebelum memanggil fungsi dengan data yang dikembalikan.

url = "https://nominatim.openstreetmap.org/reverse.php?zoom=18&format=json&accept-language=si&lat=" + lat + "&lon=" + lon;

url2 = "https://nominatim.openstreetmap.org/reverse.php?zoom=15&format=json&accept-language=si&lat=" + lat + "&lon=" + lon;
$.when($.getJSON(url), $.getJSON(url2)).done(function (data1, data2) {

Di sini saya perlu menambahkan settimeout atau interval dengan 2000 milidetik antara dua getjson. Setelah itu bisa mendapatkan respon dari respon json satu dan kedua. jika tidak ditransfer json kedua, tidak mungkin mendapat respons dari json pertama

Terima kasih atas bantuan Anda.

0
progy85 29 Februari 2020, 21:38

1 menjawab

Jawaban Terbaik

Cara terbaik untuk menunggu lebih dari satu fungsi asinkron selesai adalah dengan Promise.all https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Promise/all

Berikut adalah contoh cara yang lebih kontemporer untuk menulis panggilan jaringan menggunakan fetch:

async function fetchMap([lat, lon]) {
  const request = await fetch(
    `https://nominatim.openstreetmap.org/reverse.php?zoom=18&format=json&accept-language=si&lat=${lat}&lon=${lon}`
  );
  return await request.json();
}

async function getMapData(coordinates1, coordinates2, callback) {
  const request1 = fetchMap(coordinates1)
  const request2 = fetchMap(coordinates2)

  const resolvedResponses = await Promise.all([request1, request2]);
  callback(...resolvedResponses);
}

// This will get data for Tokyo and New York,
// and wait to call the passed-in function until both sets of JSON data are return.

getMapData([35.6850, 139.7514], [40.6943,-73.9249], console.log);

/* ^ instead of "console.log" put a reference to whichever function you want to call.
It could be an anonymous function such as the one shown in your question. */
0
Gerard 29 Februari 2020, 19:20