次のコードがあります。コメントなしで2行を見てください。何も出力されていません。 init()
機能のresolve()
が機能のthen()
の実行を引き起こさない理由を理解できません。あなたはほぼ確実block()
で例外を受けている、と.catch()
を追加する必要がありますNodejs:プロミスオブジェクトが解決しない
module.exports = function(url, list){
var phantom = require('phantom');
var Blacklist = require('../../lib/util/http/blacklist');
var blacklist = new Blacklist(list);
this.load = function(){
console.log('phantom-page:load', url);
return new Promise(function(resolve, reject){
init()
.then(function(page){
console.page('open:', url); // This doesn't output
page.open(url)
.then(function(status){
console.log('opened:', url);
resolve(page, status);
})
;
})
;
});
};
function init(){
console.log('phantom-page:init', url);
return new Promise(function(resolve, reject){
phantom.create()
.then(function(instance){
console.log('phantom-page: page created');
return instance.createPage();
})
.then(function(page){
block(page);
resolve(page);
console.log(resolve); // This outputs [Function]
});
;
});
}
function block(page){
console.log('phantom-page:block:rawRegExp', blacklist.rawRegExp);
page.on('onResourceRequested', true, function(requestData, request, raw) {
var url = requestData['url'];
console.log('phantom-page:block:resource', url);
var regRaw = '(/' + raw + '/gi).test("' + url + '")';
var isBlacklisted = eval(regRaw);
if (isBlacklisted) {
console.log('phantom-page:block:abort', url);
request.abort();
}
}, blacklist.rawRegExp);
}
};
あなたの 'init'約束の終わりに' .catch'を追加するとどうなりますか? – Mike