gpt4 book ai didi

javascript - 在我的代码中哪里引入延迟函数

转载 作者:行者123 更新时间:2023-11-28 06:42:29 25 4
gpt4 key购买 nike

我有具有验证属性的对象,并且该属性函数将请求发送到服务器进行测试。

    //clsAjax.js file where i access request function
request: function(cmd, callback){
_sendReq(cmd, callback);
}



//Definition
obj = {
title : 'name',
validation : function(this){
this.valid = false;
clsAjax.request('duplicate', function(){
if(response == true){
this.valid = true;
console.log(this.valid);
}
});
}
}



//function call
form.validation(obj);
console.log(obj.valid); // It always have false value

验证函数接收 true,但在此之前它执行验证 false 行。

我希望它等到ajax完成执行。

如何做到这一点?

谢谢。

最佳答案

您的代码中有两个问题。

1。 this 通常指的是分配了函数的对象

所以如果你这样做:

var obj = {num: 1234, func: function() {console.log(this);}};
obj.func();

您将得到以下输出:

image description

它与您的功能相同:

clsAjax.request('duplicate', function(){...});

有两种解决方法:

  1. 在创建回调之前创建对 this 的引用:

    var _this = this;
    clsAjax.request('duplicate', function(){_this.valid = true;});
  2. 使用 HTML5 Function.prototype.bind - 更改函数中 this 的含义:

    var callback = function(){this.valid = true;}.bind(this);
    clsAjax.request('duplicate', callback);

1。在回调返回之前查询值是没有意义的

form.validation(obj);
console.log(obj.valid); // It always have false value

当您执行 console.log(obj.valid) 时,您的回调尚未调用,因为它仍在与服务器通信。

关于javascript - 在我的代码中哪里引入延迟函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33669755/

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