За последние 24 часа нас посетили 19400 программистов и 1667 роботов. Сейчас ищут 1219 программистов ...

promise

Тема в разделе "JavaScript и AJAX", создана пользователем oleg_, 18 дек 2018.

  1. oleg_

    oleg_ Активный пользователь

    С нами с:
    28 ноя 2012
    Сообщения:
    108
    Симпатии:
    2
    Подскажите, как видоизменить функцию
    Код (Javascript):
    1. test(){
    2.                 axios.get('/test')
    3.                     .then(response => {
    4.                         return buildTree(response.data)
    5.  
    6.                     })
    7.             },
    под вот этот шаблон:
    Код (Javascript):
    1. function getData() {
    2.         return new Promise(resolve => {
    3.             resolve([
    4.               {
    5.                //конечные данные
    6.               }
    7.             ])
    8.  
    9.         })
    10.       }
     
  2. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    return axios.get('/test') это уже промис. Если хочешь впихнуть еще в один промис значит будет еще один промис. К примеру если нужно два аксиос запроса вкладываешь один в другой. Плюс никто не мешает использовать асунги если вложенность пугает $data = await axios('/data'); ну а сам getData соответсвенно async
     
  3. oleg_

    oleg_ Активный пользователь

    С нами с:
    28 ноя 2012
    Сообщения:
    108
    Симпатии:
    2
    нет, мне как раз нужно вместо того промиса что в примере впихнуть axios.get('/test') +
    .then(response => {
    return buildTree(response.data)
    --- Добавлено ---
    хотелось бы единообразия, так что лучше все таки промис
     
  4. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Код (Javascript):
    1. // нечто, что возвращает promise
    2. function anotherAsyncFc() {
    3.   return new Promise(r => {
    4.     setTimeout(r, 5000, 'hello, i am ')
    5.   })
    6. }
    7.  
    8. // обработка результата "нечто" через async / await
    9. async function prepareResponseWithAsyncAwait() {
    10.   let i = await anotherAsyncFc()
    11.   return i + 'async / await'
    12. }
    13.  
    14. // обработка результата "нечто" с возвращением нового promise
    15. function prepareResponseWithPromise() {
    16.   return new Promise(r => {
    17.     anotherAsyncFc().then((i) => {
    18.       r(i + 'promise')
    19.     })
    20.   })
    21. }
    22.  
    23. // вызов обработчика через async/await
    24. async function asyncAwaitFc() {
    25.   console.log(await prepareResponseWithAsyncAwait())
    26. }
    27. asyncAwaitFc()
    28.  
    29. // вызов обработчика через promise
    30. prepareResponseWithPromise().then(i => {
    31.   console.log(i)
    32. })
     
  5. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    кароч
    Код (Javascript):
    1. function getData() {
    2.     return axios.get('/test')
    3.         .then(response => buildTree(response.data));
    4. }
     
  6. oleg_

    oleg_ Активный пользователь

    С нами с:
    28 ноя 2012
    Сообщения:
    108
    Симпатии:
    2
    если бы все так просто было яб не спрашивал. Так возвращается только промис, без обработки
    по совету romach работает

    Код (Javascript):
    1. test1(){
    2.                 return new Promise(r => {
    3.                     axios.get('/test')
    4.                         .then(response => {
    5.                                 r(buildTree(response.data))
    6.                         })
    7.                 })
    8.             }
    никак до конца не вкурю, как этот чертов промис работает
     
  7. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.584
    Симпатии:
    1.762
    Асинхронно запускает переданную в параметре функцию. Этой функции, в свою очередь, передаёт функцию resolve. Когда рабочая функция промиса посчитает, что она завершила свою работу, она должна вызвать resolve, для того чтобы оповестить того, кто ожидает окончания промиса о том, что она отработала.