gpt4 book ai didi

javascript 和函数的执行顺序

转载 作者:行者123 更新时间:2023-11-28 20:16:23 24 4
gpt4 key购买 nike

我的类(class)看起来像

function classUser() {
var userName;
var firstName;
var lastName;
var sessionid;
}

classUser.prototype.set_user_name = function (user_name) {
this.userName = user_name;
}

classUser.prototype.set_first_name = function (first_name) {
this.firstName = first_name;
}

classUser.prototype.set_last_name = function (last_name) {
this.lastName = last_name;
}

classUser.prototype.get_curr_session = function () {
return this.sessionid;
}

classUser.prototype.save = function () {

$.ajax({
type: "POST",
url: "http://myapihost.com:8080/api/1.0/user/",
data: JSON.stringify(this),
dataType: "json",
success: function (apiResponse) {
var currSessionID = apiResponse.sessionId;
this.sessionid= currSessionID;
},
error: function (apiResponse) {
alert("error : " + apiResponse);
this.sessionid= "Error";
}
});
}

我称他们为

    var User = new classUser();
User.set_first_name(userFirstName);
User.set_last_name(response.last_name);
User.set_user_name(response.username);

User.save();
var currSessionID = User.get_curr_session();

有时,get_curr_session会在success: call之前被调用。

问题:我尝试从 success 本身返回 sessionid ,以便 save() 函数完成这项工作。那是行不通的。因此我分为两个功能。

我可以一次调用就完成它吗?如果我使用 2 个函数 - 我如何确保它始终有效。

我实际上可以成功分配 currSessionID,但这破坏了类的神圣性。我见过其他解决方案,例如使用“完成”,不确定这是否有帮助。

=========================================

我修改了代码如下

classUser.prototype.save = 函数(回调){

 $.ajax({
type: "POST",
url: "http://myapihost.com:8080/api/1.0/user/",
data: JSON.stringify(this),
dataType: "json",
success: function (apiResponse) {
var currSessionID = apiResponse.sessionId;
this.sessionid= currSessionID;
callback(null, currSessionID);
},
error: function (apiResponse) {
alert("error : " + apiResponse);
this.sessionid= "Error";
callback("error", null);
}
});
}

当我打电话时

User.save(mycallback);


function mycallback(error, sessId){
if(error) {
console.log("Some error occurred. Check code");
return;// Something went wrong
} else {
console.log("Session : " + sessId);
}
}

现在这样好吗?

谢谢阿杰

最佳答案

这是因为ajax请求的success和error函数是异步执行的。

为了确保这种情况不会发生,您应该向保存函数添加一个回调,该回调将在成功或错误函数运行后调用。

classUser.prototype.save = function (callback) {

$.ajax({
type: "POST",
url: "http://myapihost.com:8080/api/1.0/user/",
data: JSON.stringify(this),
dataType: "json",
success: function (apiResponse) {
var currSessionID = apiResponse.sessionId;
this.sessionid= currSessionID;
callback(null, currSessionID);
},
error: function (apiResponse) {
alert("error : " + apiResponse);
this.sessionid= "Error";
callback(apiResponse, null);
}
});
}

然后,当调用保存函数时,你可以这样做:

User.save(function(error, sessId) {
if(error) {
// Something went wrong
} else {
// Do whatever you need to do
}
});

您应该注意,这也将异步运行。因此,如果您想使用 session ID,请不要在 User.save(...) 调用之后执行此操作,而应在函数内部执行此操作。

关于javascript 和函数的执行顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19132405/

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