gpt4 book ai didi

javascript - casper 方法之后函数的返回值

转载 作者:太空宇宙 更新时间:2023-11-04 00:30:55 24 4
gpt4 key购买 nike

在下面的代码中,我想调用checkMainBox(cthis)。我想对其进行设置,以便该函数返回检索到的数字或返回 false。但在 checkMainBox() 中我不知道如何返回值。返回的数字未定义。我很确定由于异步行为我不能这样做,但是下一个最好的方法是什么?

function checkMainBox(cthis){
var number;
cthis.waitForSelector("._XWk", function(){
cthis.capture("result.png");
cthis.then(function(){
var number = cthis.evaluate(function(){
return $("._XWk").txt();
})

// console.log("number", number);
})
})
return number
}

function getPhoneNumber(cthis){
console.log("NUMBER::", checkMainBox(cthis));
//checkMainBox(cthis) should return false or the number
}

casper.on("error", function(msg){
this.echo("error: " + msg, "Error");
})
casper.on("page.error", function(msg, trace){
this.echo("Page Error: " + msg, "error");
});
casper.on("remote.message", function(message){
this.echo("Remote: " + message);
});

casper.start("http://google.com/", function(){
this.waitForSelector("form[action='/search']");
});
casper.then(function(){
this.fill("form[action='/search']", {q : "ebay.com phone number"}, true);
})
casper.then(function(){
getPhoneNumber(this)
})
casper.run();

编辑::

最近的尝试,但如果您有其他方法,请随时分享:

function checkMainBox(cthis){
var number;
return new Promise(function(resolve, reject){
cthis.waitForSelector("._XWk", function(){
cthis.capture("result.png");
cthis.then(function(){
var number = cthis.evaluate(function(){
return $("._XWk").txt();
})

resolve(number)
})
});
})

}

function getPhoneNumber(cthis){
checkMainBox(cthis).then(function(result){
console.log("NUMBER::", checkMainBox(result));
})
.catch(function(err){
if(err) console.log(err);
})

}

错误:错误:ReferenceError:找不到变量:Promise

编辑2:

function getPhoneNumber(cthis){
// var number;
cthis.waitForSelector("._XWk", function(){
cthis.capture("result.png");
cthis.then(function(){
var number = cthis.evaluate(function(){
return $("._XWk").html();
})
checkMainBox(number);
// console.log("number", number);
})
})
}

function checkMainBox (number){
// console.log("NUMBER::", number);
return number
}

...

casper.then(function(){
this.fill("form[action='/search']", {q : "ebay.com phone number"}, true);
})
casper.then(function(){
var number;
console.log(getPhoneNumber(this)) // should be the value

})
casper.run();

最佳答案

你可以使用穷人的 promise (重要的东西是粗体的):

function checkMainBox(cthis){
<b>var number = {};</b>
cthis.waitForSelector("._XWk", function(){
cthis.capture("result.png");
cthis.then(function(){
<b>number.value</b> = cthis.evaluate(function(){
return $("._XWk").txt();
})
})
})
<b>return number</b>
}

function getPhoneNumber(cthis){
var number = checkMainBox(cthis));
<b>cthis.then</b>(function(){
console.log("outer: " + <b>number.value</b>);
});
}

CasperJS已经提供了一个类似于Promises的环境,但是你仍然需要有一个可以异步接收值的空对象。 cthis.then 很重要,因为它处理等待,直到 checkMainBox 内部的 cthis.waitForSelector 完成。

关于javascript - casper 方法之后函数的返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40967005/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com