Как использовать данные в Promise & Ajax - PullRequest
0 голосов
/ 08 ноября 2018

Я использую данные Promise + AJAX для загрузки на мою страницу.

function $myAjax(url, callback) {
   let p = new Promise(function(resolve, reject) {
       $.ajax({
           url: url,
           method: "GET",
           data: "data",
           async:false, 
           cache: false,
           success: function(resp) {
              callback(resp);
              resolve();
           },
           failure: function(xhr) {
              reject();
           }
      });
 });
 return p;
}

$myAjax('api/2006.json', function(resp1){
       mapRender('svg1',resp1,'#b4cdff');
}).then(function() {
       return $myAjax('api/2010.json', function(resp2) {
           mapRender('svg2',resp2,'#b4cdff');
       }); 
}).then(function() {
         //...  and so on
})

Но у меня есть проблема, чтобы вытащить resp1 и resp2 из этой функции, кроме mapRender Мне нужно что-то resp1 & resp2, и что-то не подходит внутри $myAjax .

Я пытаюсь вставить resp в массив.

$myAjax('api/2006.json', function(resp1) {
         array.push(resp1)
         mapRender('svg1',resp1,'#b4cdff');
})
console.log(array)

console.log(array) => показать данные, но со значком «значение, указанное ниже, было оценено только сейчас»

console.log(array[0]) => не определено

Что с этим не так? И как я могу получить соответствующую форму $myAjax?

1 Ответ

0 голосов
/ 08 ноября 2018

Гораздо более эффективный способ сделать это - использовать само обещание $.ajax вместе с Promise.all(), где у вас будет доступ ко всем ответам

var svgData =[
   {url:'api/2006.json', selector: 'svg1'},
   {url:'api/2010.json', selector: 'svg2'}
];

var promises = svgData.map(function(item) {
  // return the ajax promise
  return $.getJSON(item.url).then(function(res) {
    // add the data to svgData object
    item.data = res;

  })
});

Promise.all(promises).then(function() {
  svgData.forEach(function(item) {
    // do what you need with each item here
    mapRender(item.selector, item.data, '#b4cdff');
  });
}).catch(function(err) {
  alert('Something went wrong with one of the requests');
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...