我有一些像这样的功能
function getIndex(name) {
var deferred = $.Deferred();
var index = 0;
$("#dropDown option").each(function () {
if ($(this).text() === name) {
index = this.index + 1;
deferred.resolveWith(this, {result: index });
return deferred.promise();
}
});
deferred.resolveWith(this, { result: index });
return deferred.promise();
}
然后我调用这个函数:
getIndex("Hello World").done(function(result) {
alert (result);
});
但是,结果的内容未定义。
我是否错误地使用了延迟逻辑?那么什么是正确的方式呢?
答案 0 :(得分:-1)
几个“问题”。
无论选择使用resolveWith,其语法都将数组作为第二个参数,而不是对象。
似乎尝试获取具有匹配文本的每个选项的索引。
以下修改后的代码示例解析了延迟一次,并显示了传递给resolve
方法的值数组如何作为单独的参数传递给done
回调。
function getIndex(name) {
var deferred = $.Deferred();
var result = [];
$("#dropDown option").each(function () {
if ($(this).text() == name) {
result.push(this.index + 1);
}
});
deferred.resolveWith(this, result);
console.log("result in getIndex: " + result);
return deferred.promise();
}
getIndex("hello folks and world").done(function(a, b) {
console.log("done callback arguments: " + a + ", " + b);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select id="dropDown">
<option>hello folks and others</option>
<option>hello folks and world</option>
<option>hello folks and world</option>
</select>