解除承诺及其处理程序
我想启动一系列任务,我需要按顺序执行。 当一个按钮(#submitButton)被点击时,整个进程被启动(startAll函数),所以我实现了这样的架构:
function startAll() { var startDeferred, highPriorityTasksDeferred, lowPriorityTasksDeferred, finalizeDeferred; startDeferred = $.Deferred; **highPriorityTasksDeferred= startDeferred.then(initialize).done(initiate); <-- ERROR HERE** lowPriorityTasksDeferred= highPriorityTasksDeferred.then(function () { console.log('Processing HIGH priority tasks...'); return highPriorityTasks; }) .done(function () { console.log('HIGH priority taks processed.'); }); finalizeDeferred= lowPriorityTasksDeferred.then(function () { console.log('Processing LOW priority tasks...'); return lowPriorityTasks; }) .done(function () { console.log('LOW priority taks processed.'); }); finalizeDeferred.then(finalize).done(terminate); // Starts all startDeferred.resolve(); } function initialize() { // Things to be initialized just before starting process console.log('Initiating process...'); // Stuff return; } function initiate() { // Once initialized, do simple things setButtonDisabled(true); console.log('Process started at ' + $.now()+ '
'); return; } function finalize() { // Things to be done just before ending process // Free resources, etc. console.log('
Finishing process...'); // Stuff return; } function terminate() { // Things to be done once finished is done. // Simple things such as those related to UI. setButtonDisabled(false); console.log('
Process terminated at ' + $.now()); return; } function setButtonDisabled(status) { $('#submitButton').prop("disabled", status); }
high / lowPriorityTasks方法有这样的结构:
function high/lowPriorityTasks() { getTasks().then(function (response) { // stuff }).then(function () { // stuff }).fail(function (err) { // stuff }); }
控制台输出应该是:
Initiating process... Process started at XXX Processing HIGH priority tasks... HIGH priority taks processed. Processing LOW priority tasks... LOW priority taks processed. Finishing process... Process terminated at XXX
重要说明 :
- 函数初始化,启动,终止和终止,它们的最后一个命令是return; 但我不确定它是否正确。
- 我正在使用jQuery 1.10.2和asp.net MVC 4
观察到的问题 :
-
执行它时,会引发运行时错误,说明该对象不接受粗体加粗的属性或方法’then’:
highPriorityTasksDeferred = startDeferred.then(initialize).done(initiate);
第一次尝试 :
正如kenneth所说的那样,在$ .Deferred之后的括号被错过,所以通过添加$ .Deferred()来执行该过程,但是出现了一些问题:好像,高/低优先任务函数没有执行,因为在控制台中显示:
Initiating process... Process started at XXX Finishing process... Process terminated at XXX
有任何想法吗? 另外我想知道是否归来; 在函数初始化,启动,完成和终止是最好的方法,或者有另一个最佳选择。
第二次尝试 :
调用highPriorityTasks和lowPriorityTasks时会遗漏一些括号,所以现在它们被正确执行但问题是它们没有按顺序完成….
您在$.Deferred
之后缺少括号。 目前它正在返回延迟函数而不是Deferred-object。
将其更改为以下内容,它应该工作:
startDeferred = $.Deferred();
- 0x800a1391 – JavaScript运行时错误:’jQuery’未定义 – MVC 4
- 如何在视图中使用JSON数据?
- 使用mvc4中的form.serialize()发布包含HttpPostedFileBase文件的模型以及一些参数
- 使用MVC 4进行远程jQueryvalidation,动态validation以loc开头的所有输入?
- 如何在MVC4 RazorView中实现Dropdownlist列表图像选择以及文本框
- uncaught typeerror undefined不是一个函数
- 如何使用jquery在MVC中发布viewmodel
- MVC 4 – 级联下拉列表 – Ajax JavaScript调用问题
- mvc 4底部的脚本 – 不在View页面中执行