Javascript 是否可以在等待事件侦听器时停止函数的执行?
我使用gmail.js库编写了这个函数,它从事件侦听器接收返回的字符串,我希望在发送电子邮件之前将该字符串注入邮件正文。在等待事件侦听器从外部脚本获得响应时,如何让函数停止执行?我有一种感觉,它可以通过同步回调来完成,但我不知道如何去做。在这件事上,如果有任何帮助,我将不胜感激Javascript 是否可以在等待事件侦听器时停止函数的执行?,javascript,Javascript,我使用gmail.js库编写了这个函数,它从事件侦听器接收返回的字符串,我希望在发送电子邮件之前将该字符串注入邮件正文。在等待事件侦听器从外部脚本获得响应时,如何让函数停止执行?我有一种感觉,它可以通过同步回调来完成,但我不知道如何去做。在这件事上,如果有任何帮助,我将不胜感激 gmail.observe.before('send_message', function(url, body, data, xhr) { console.log('In the before send message
gmail.observe.before('send_message', function(url, body, data, xhr) {
console.log('In the before send message method');
var event = new CustomEvent('Marketing', {
detail: {
body: xhr.xhrParams.body_params.body,
email: gmail.get.user_email()
}
});
window.addEventListener('message', function(event) {
if (event.data.type && (event.data.type == "FROM_PAGE")) {
console.log("received a reply");
console.log(event.data.text);
newstring = (event.data.candidate);
console.log(newstring);
console.log(event.data.token);
gotNewString = true;
}
});
window.dispatchEvent(event);
console.log('sent the message to extension.js');
function listen(data){
console.log("123123",JSON.stringify(data));
console.log(data);
}
newstring = "Why must you torture me so?";
var oldCmml = xhr.xhrParams.url.cmml;
var body_params = xhr.xhrParams.body_params;
if (newstring.length > oldCmml) {
xhr.xhrParams.url.cmml = newstring.length;
} else {
while (newstring.length < oldCmml) {
newstring += ' ';
}
xhr.xhrParams.url.cmml = newstring.length;
}
console.log(newstring);
body_params.body = newstring;
console.log("sent");
});
gmail.observe.before('send_message',函数(url、正文、数据、xhr){
log('In the before send message method');
var事件=新的CustomEvent('营销'{
详情:{
body:xhr.xhrParams.body_params.body,
电子邮件:gmail.get.user_email()
}
});
window.addEventListener('message',函数(事件){
if(event.data.type&&(event.data.type==“来自页面”)){
log(“收到回复”);
日志(event.data.text);
newstring=(event.data.candidate);
console.log(新闻字符串);
日志(event.data.token);
gotNewString=true;
}
});
窗口。dispatchEvent(事件);
log('将消息发送到extension.js');
函数侦听(数据){
log(“123123”,JSON.stringify(data));
控制台日志(数据);
}
newstring=“你为什么要这样折磨我?”;
var oldcml=xhr.xhrParams.url.cmml;
var body_params=xhr.xhrParams.body_params;
如果(newstring.length>oldcml){
xhr.xhrParams.url.cmml=newstring.length;
}否则{
while(newstring.lengthgmail.observe.before('send_message', function(url, body, data, xhr, done) {
// you can do processing here
// and have to call done, to let the caller continue his work
done();
});
对于监听器来说,这显然是正常情况下不提供的,但由于gmail.js是开源的,您可以更改它?我认为您可能希望消息事件触发发送,而不是相反的方式…我希望我可以这样做,不幸的是,
observe.before
是按下发送按钮时发生的API调用,这是执行此代码的其他方法,因此我必须从内部暂停函数,但您不能这样做。即使可以使用循环冻结所有内容,也可以防止消息事件触发。如果您可以取消之前的事件,那么您可以稍后调用gmail.observe.trigger
,使用与已取消事件相同(或几乎相同)的值“resume”。