gpt4 book ai didi

validation - 使用 Backbone.js 验证时如何处理异步调用(特别是唯一性)

转载 作者:可可西里 更新时间:2023-11-01 09:46:09 26 4
gpt4 key购买 nike

这与使用 Backbone 的客户端或服务器端应用程序相关。我正在尝试创建一个验证函数,对 MongoDB 或某些 REST 调用(取决于环境)进行唯一性检查。这两个调用本质上都是异步的;但是,我认为我实际上需要将其阻止在这里以进行验证。如果我不返回任何内容,验证函数将假定验证已通过。

我的代码目前在服务器端看起来像这样:

isUnique: function (key) {
var dfdFindOne = this.findOne({key: this.get(key)}),
dfd = new Deferred();
dfdFindOne.done(function (err, result) {
console.log(result);
dfd.resolve(true);
});
return dfd;
};

...这里有些东西....
我觉得在我返回之前我可以在这里做一些等待直到完成功能......也许不是。我希望 backbone 提供回调函数或其他东西,或者接受某种延迟类型的东西。

validate: function() {
var result = undefined;
if(!this.isUnique(key).done(function(){
result = "AHHH not unique!";
});
return result;
}

一个可能的解决方案可能是强制 mongodb 的本地 Node 客户端同步调用事物。我想我可以对休息电话做同样的事情……但这可能是一个糟糕的解决方案。

最佳答案

您可以调用 ajax 请求并以这种方式设置 async:false 返回值。但是使用 async:false 是邪恶的,因为可能会在浏览器被锁定时出现。对于服务器端,可能并不总是有 set async: false 的解决方法

我的建议是使用您自己的验证流程而不是 Backbone.validate 流程,因为 Backbone 的验证流程仅考虑同步验证。你可以尝试这样的事情:

//Code in your Model
isUnique: function (callback) {
var dfdFindOne = this.findOne({key: this.get(key)});
dfdFindOne.done(function (err, result) {
console.log(result);
callback(result);
});
};
validate: function(callback) {
this.isUnique(callback);
}

//trying to validate before save
model.validate(function(result){
if( result == 'whatexpected'){
model.save();
}
});

关于validation - 使用 Backbone.js 验证时如何处理异步调用(特别是唯一性),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12555747/

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