@vova_kondrashov

Как сделать выполнение функций по очереди?

Немного истории о том как работает скрипт...
Когда запускаю скрипт происходит так что выполняется функция status и значение отдает сразу undefined, после чего это значение отдается return status(); после того как page.open(url, status); загрузился callback отдает значение success, но это значение не попадает в return status(); оно там по прежнему undefined.

Вопрос такой знатокам js, как сделать что бы после загрузки страницы с помощью page.open(url, status); получить статус success или fail и отдать его на выходе функции xPage('https://ya.ru/'), было boolean значение True или False.

var webPage = require('webpage'),
    page = webPage.create();


function xPage(url){

  var xStatus = function(status, a) {
   
   if(status === 'success')
   {
   	console.log('StatusPage: ' + status);
    
    a = 'ggggggggggggg';
    return{a:a}
   }
   
   else
   
   if(status === 'fail')
   console.log('StatusPage: ' + status);

   else
   console.log('Status = undefined');
   
  }

  var b;
  page.open(url, xStatus(b));

  console.log(b);
  
}

xPage('https://ya.ru/');
  • Вопрос задан
  • 759 просмотров
Пригласить эксперта
Ответы на вопрос 2
@v_m_smith
лучше бы я пил и курил
С использованием классических промисов будет быглядеть примерно так
var webPage = require('webpage'),
    page = webPage.create();

var Promise = require('bluebird');

function xPage(url){

    return new Promise(function (resolve, reject) {
       page.open(url, function (status) {
           if (status !== 'success') {
               console.log('StatusPage: ' + status);
               reject(status);
           } else {
               console.log('StatusPage: ' + status);
               var a = 'ggggggggggggg';
               resolve({
                   a: a
               });
           }
       });
   });
    
}

xPage('https://ya.ru/')
    .then(function (stat) {
        console.log( JSON.stringify(stat) );
        page.render(Date.now() + '.png');
        phantom.exit();
    })
    .catch(function(err){ console.log(err) })
;


bluebird инсталлируется как обычно через
npm i bluebird
находясь в папке проекта phantomjs
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы