Показать сообщение отдельно
  #3 (permalink)  
Старый 23.10.2023, 14:18
Интересующийся
Отправить личное сообщение для kuliev Посмотреть профиль Найти все сообщения от kuliev
 
Регистрация: 14.10.2016
Сообщений: 10

Благодарю за ответ. Сам вчера весь день штудировал про Promise, но что-то толком у меня не получилось.

Взял Ваш код, немного поправил и все получилось. Спасибо!

Для тех кому вдруг понадобиться такая штука...
async function getOption(id = null){
    function getPart (id) {
      return new Promise (promise => {
        $.ajax(
        {
          url: './ajax.php',
          type: 'post',
          dataType: 'json',
          data: {
            id: id
          },
          success: function(data){
            let option = '';
            
            for(i = 0; i < data.result.length; i++){
              option += '<option value="' + data.result[i].id + '">' + data.result[i].value + '</option>';
            }
            
            promise ({
              next:data.has_next, 
              option, 
              endsId: data.result[data.result.length - 1]?.id
            }) ;
          }
        });
      })
    }

    let start = true;
    let option = '';
    let endsId = id;
    
    while (start){
      const promise = await getPart(endsId);
      option += promise.option;
      endsId = promise.endsId;
      start = promise.next;
    }

    return option;
  }

  // Вызов из асинхронной функции
  const options = (async () => {await getOption()});
  // тут обработка результата

  // Вызов из обычной функции
  getOption().then (options => {
    console.log(options)
  });
Ответить с цитированием