taras1978
@taras1978
почти программист

Не могу написать promise, не работает?

Доброго дня.
Не могу написать промис. Первый раз имею с ним дело. С примерами вроде разобрался а на деле не работает.
Вот например есть функция получения данных по AJAX, надо ее выполнить, потом нарисовать таблицу.

Вот функция получения данных:
function get_organizations() {
		var data = {
			action: 'get_organizations',
					    }
		 jQuery.post( ajaxurl, data, function( resp ){
			console.log( 'response: ' + resp );  //выводится вторым
          
			organizations = JSON.parse(resp);	 
		
		 return 1;
	});

Вот допустим промис и функция:
let promise = new Promise(function(resolve, reject) {
  	        resolve(get_organizations());
  	              });
    promise.then(
        result => console.log(organizations),  // выполняется  первым
        error => alert(error)  );

Что то непонятно, функция которая должна вызываться второй, вызывается первой.
  • Вопрос задан
  • 69 просмотров
Решения вопроса 1
MrDecoy
@MrDecoy Куратор тега JavaScript
Верставший фронтендер
1. Вы сразу резолвите промис тем, что возвращает функциюя get_organizations.
2. А функция у Вас ничего не возвращает. Соответственно, вы резолвите свой промис значением undefined.
3. Что такое organizations в этой строчке result => console.log(organizations)?
4. у jQuery есть своя система промисов - deferred объекты. На хабре есть статьи с примерами.
Итого, причешим Ваш код:
function get_organizations(ajaxurl) {
  var data = {
    action: 'get_organizations',
  }
  return jQuery.post( ajaxurl, data, function( resp ){
    console.log( 'response: ' + resp );
    const organizations = JSON.parse(resp);
    return organizations;
  });
}

get_organizations('https://some_url').then(organizations => console.log(organizations))
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы