【发布时间】:2016-12-08 00:17:19
【问题描述】:
我有这样的功能
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);
});
但是,结果的内容是未定义的。
我是否错误地使用了延迟逻辑?那么正确的方法是什么?
【问题讨论】:
-
尝试使用
deferred.resolve而不是resolveWith -
你为什么使用promise? Promise 适用于异步逻辑,但您的代码中没有任何异步内容。
-
@abl 你的意思是我可以做 var index = getIndex("Hellow World") 然后做 alert(result) 完全没有问题吗?
-
可以,但是
getIndex函数可以更简单,根本不需要使用promise。 See this snippet -
真的有 deferred.resolveWith 方法。我从来没有听说过。
标签: javascript jquery jquery-deferred