当使用KnockoutJS时,如果使用单击处理程序调用的函数返回了一个promise会导致任何问题吗?
答案 0 :(得分:3)
首先:你试过吗?很容易自己测试一下。
直接回答:这取决于你的想法(一些更精细的说法会很好)。
如果您碰巧有一个执行某些逻辑的函数,并返回一个承诺(由于某种原因与您正在制作的点击绑定完全无关),您可以从您的点击处理程序调用它,您甚至可以将其用作直接点击处理程序。
但是,如果click处理程序背后的逻辑依赖于异步任务并需要等待它完成,则不能将所述函数用作单击处理程序,因为返回的promise将被忽略。您仍然可以定义一个调用该函数的单击处理程序,并在返回的promise上创建一个回调。
任何更具体的问题都需要一个更复杂的问题,理想情况是你正在考虑的情况的(伪)代码示例。
一个例子:
function asyncLogic() {
var deferred = $.Deferred();
// Perform async logic, then resolve
setTimeout(function () {
deferred.resolve();
}, 100);
return deferred.promise();
}
function handleClick(event) {
// Disable the button, then perform the async logic, when its done re-enable the button
$(event.target).attr('disabled', 'disabled');
asyncLogic().then(function () {
$(event.target).removeAttr('disabled');
});
}
<form>
<input type="submit" data-bind="click: handleClick" />
</form>