Knockout.js KnockoutJS单击绑定返回承诺

Knockout.js KnockoutJS单击绑定返回承诺,knockout.js,Knockout.js,使用KnockoutJS时,如果使用click处理程序调用的函数返回承诺,会导致任何问题吗?首先:您尝试过吗?这是很容易测试自己 直截了当地回答:这取决于你在想什么(多做些细化就好了) 如果您碰巧有一个执行某些逻辑的函数,并返回一个承诺(由于某些原因与您正在进行的单击绑定完全无关),那么您可以从单击处理程序调用它,甚至可以直接将其用作单击处理程序 但是,如果click处理程序背后的逻辑依赖于异步任务,并且需要等待它完成,则不能将该函数用作click处理程序,因为返回的承诺将被忽略。您仍然可以定义

使用KnockoutJS时,如果使用click处理程序调用的函数返回承诺,会导致任何问题吗?

首先:您尝试过吗?这是很容易测试自己

直截了当地回答:这取决于你在想什么(多做些细化就好了)

如果您碰巧有一个执行某些逻辑的函数,并返回一个承诺(由于某些原因与您正在进行的单击绑定完全无关),那么您可以从单击处理程序调用它,甚至可以直接将其用作单击处理程序

但是,如果click处理程序背后的逻辑依赖于异步任务,并且需要等待它完成,则不能将该函数用作click处理程序,因为返回的承诺将被忽略。您仍然可以定义一个调用函数的单击处理程序,并对返回的承诺创建回调

任何更具体的问题都需要一个更详细的问题,最好是一个(伪)代码示例,说明您正在考虑的情况

例如:

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>
函数异步逻辑(){
var deferred=$.deferred();
//执行异步逻辑,然后解析
setTimeout(函数(){
延迟。解决();
}, 100);
延迟返回。承诺();
}
函数handleClick(事件){
//禁用按钮,然后执行异步逻辑,完成后重新启用按钮
$(event.target).attr('disabled','disabled');
asyncLogic().then(函数(){
$(event.target).removeAttr('disabled');
});
}

我不明白你的问题,你能扩展一下吗?