2014-11-09 3 views
2

Я столкнулся с некоторыми проблемами при использовании PhantomJS. Я ссылаюсь на this article. Я попытался вложить open() функции, но я не получил результаты, которые я хочу, а именно, открытие всех 4-х URL-адресов и печать всех 4 console.log.Когда выходить при использовании вложенных функций open()?

код:

var page = require('webpage').create();    //新建一个页面 

url1 = "-----"; 
url2 = "-----"; 
url3 = "-----"; 
url4 = "http://-----/"; 

page.open(url1, function(status) {     //导航到第一个URL 
    console.log('111111111111'); 
    if (status == "fail") phantom.exit();   //如果发生错误,退出程序 
    page.open(url2, function(status) {    //否则在页面加载完成的回调函数中继续导航到第二个URL,依次类推 
     console.log('22222222222222'); 
     if (status == "fail") phantom.exit(); 
     page.open(url3, function(status) { 
      console.log('3333333333333333'); 
      if (status == "fail") phantom.exit(); 
      page.open(url4, function(status) { 
       console.log('444444444444444'); 
       if (status == "fail") phantom.exit(); 
      }); 
     }); 
    }); 
    console.log('close'); 
    phantom.exit(); 
}); 

результат:

$ phantomjs test.js 
111111111111 
close 
+1

Мне нравится, как в коде есть диагональная символьная строка. –

+0

@sanki Я думаю, что это должно было бы выполнить каждый выход – mugbya

ответ

2

Вы должны exit PhantomJS, когда вы закончите его выполнения, и кажется, что вы сделали после того, как вы openurl4:

page.open(url1, function(status) { 
    console.log('111111111111'); 
    if (status == "fail") phantom.exit(); 
    page.open(url2, function(status) { 
     console.log('22222222222222'); 
     if (status == "fail") phantom.exit(); 
     page.open(url3, function(status) { 
      console.log('3333333333333333'); 
      if (status == "fail") phantom.exit(); 
      page.open(url4, function(status) { 
       console.log('444444444444444'); 
       if (status == "fail") phantom.exit(); 
       console.log('close'); 
       phantom.exit(); 
      }); 
     }); 
    }); 
}); 

PhantomJS является асинхронным, как и Николас говорится в его блоге. Вы просто выходите слишком рано.

+0

ой, танки вы. Я ошибся – mugbya

+0

Извините, у меня есть новая проблема. PhantomJS является асинхронным, как открыть несколько функций open()? Я открываю оба, но только одно исполнение – mugbya

+0

Что вы имеете в виду? Вышеприведенный код открывает каждый из URL-адресов один за другим. У вас есть ошибки? Возможно, страница не может быть загружена. –

Смежные вопросы