关于油猴脚本的一个问问题,代码的处理结果没按顺序执行呢?
if(zdm=="505"){
zdnr=document.getElementById(indexnr).value.replace("▼a","");
var arr505=zdnr.split(",")
var other=arr505;
var yuanwen=arr505;
var translation;
const url = 'https://findmyip.net/api/translate.php?text=' + encodeURIComponent(yuanwen);
GM_xmlhttpRequest({
method: 'GET',
url: url,
onload: function(response) {
if (response.status == 200) {
var Jresponse = JSON.parse(response.responseText);
let translation = Jresponse.data.translate_result;
console.log(translation+"100");
}
},
onerror: function(error) {
console.error('翻译请求发生错误:', error);
}
});
console.log(translation+"100");
if(other.substr(other.length-1,1)!=".")
{
if(other.substr(other.length-1,1)!=")"&&other.substr(other.length-1,1)!="-"&&other.substr(other.length-1,1)!='"')
{
setInputValue(document.getElementById(indexnr), "▼a"+arr505+"("+translation+"),"+arr505+".")
}
}
else
{
setInputValue(document.getElementById(indexnr), "▼a"+arr505+"("+translation+"),"+arr505)
}
}
为什么,291行是后出的结果 本帖最后由 涛之雨 于 2024-6-27 19:59 编辑
`GM_xmlhttpRequest`是异步函数。
更多细节和解决方案,请自行研究。。。
此外,[`substr` 已被弃用](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/String/substr),
同上,更多细节和解决方案,请自行研究。。。
异步,GM_xmlhttpRequest不会先执行里面的onload 因为 JavaScript 中的 console.log 是异步执行的,而你的翻译请求是通过 GM_xmlhttpRequest 异步进行的
举个例子,像这样把GM_xmlhttpRequest包装成异步函数,然后用 await sendQmsg() 就可以顺序执行异步函数了
本帖最后由 donsllon 于 2024-6-28 10:11 编辑
chr_233 发表于 2024-6-27 22:31
举个例子,像这样把GM_xmlhttpRequest包装成异步函数,然后用 await sendQmsg() 就可以顺序执行异步函 ...
这个方法是可以了,可出现一个新的问题了
async function main1() {
try {
this.fyjg = await translateText(yuanwen);
console.log(this.fyjg);
} catch (error) {
console.error(error);
}
if(other.substr(-1,1)!=".")
{
if(other.substr(-1,1)!=")"&&other.substr(-1,1)!="-"&&other.substr(-1,1)!='"')
{
console.log(this.fyjg+"100");
setInputValue(document.getElementById(indexnr), "▼a"+arr505+"("+this.fyjg+"),"+arr505+".")
}
}
else
{
console.log(this.fyjg+"200");
setInputValue(document.getElementById(indexnr), "▼a"+arr505+"("+this.fyjg+"),"+arr505)
}
}
main1();
}
setInputValue(document.getElementById(indexnr), "▼a"+arr505+"("+this.fyjg+"),"+arr505+".")
可这个代码又不执行了。{:1_907:} donsllon 发表于 2024-6-28 10:09
这个方法是可以了,可出现一个新的问题了
async function main1() {
...
要确保在Promise里面调用了resolve或者reject,不然await不会返回,会一直阻塞
页:
[1]