我想通过使用isValid
方法而不是then
方法创建一个小脚本来检查模型是否有效。
以下是使用then
方法的脚本:
$('button').click(function () {
let model = Promise.resolve({
then(x, y) {
let isValid = $('input[type=text]').val().length > 0;
x(isValid);
}
});
model.then(isValid => console.log(isValid));
});

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" />
<button>check</button>
&#13;
我的目标:
if (model.isValid()) {
console.log('model is valid.');
}
我试过了:
$('button').click(function () {
let model = Promise.resolve({
isValid() {
let isValid = $('input[type=text]').val().length > 0;
return isValid;
}
});
if (model.isValid()) {
console.log('model is valid.');
}
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" />
<button>check</button>
&#13;
错误讯息:
未捕获的TypeError:&#39; model.isValid&#39;不是一个功能
我的问题:在这种情况下如何定义isValid
函数?
答案 0 :(得分:1)
第二个实现得到了运行时错误,因为Promise.resolve返回:
一个Promise对象 用给定的值解决。如果该值是可以的(即具有a “然后”方法),返回的承诺将“跟随”那个, 采用其最终状态;否则返回的承诺将是 实现了价值。
所以,如果你定义这样的承诺:
Promise.resolve({
isValid() {
let isValid = $('input[type=text]').val().length > 0;
return isValid;
}
});
您要返回不 thenable 的对象(它没有then
方法,只有isValid
方法,所以你不能简单地做model.isValid()
,但你必须:
$('button').click(function () {
let model = Promise.resolve({
isValid() {
let isValid = $('input[type=text]').val().length > 0;
return isValid;
}
});
model.then(res => {
if (res.isValid()) {
console.log('model is valid.');
}
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" />
<button>check</button>
答案 1 :(得分:0)
那么,你为什么需要使用Promise?对于你的例子,它更简单
$('button').click(function () {
let isValid = $('input[type=text]').val().length > 0;
if (isValid) {
console.log('model is valid.');
}
});