当前位置: 首页 > 面试题库 >

jQuery何时/然后(也何时/完成)不等待

黎奇略
2023-03-14
问题内容

我看过许多使用这种语法的示例,但是看不到我做错了什么。“ then”函数在ajax调用返回之前正在运行。

我也尝试过使用$ .deferred和其他一些模式无济于事。

有人可以看到我所缺少的吗?

我已经调试,可以看到在ajax调用返回其成功(或错误)数据之前,已完成/然后内部进行的调用。

谢谢你的帮助。

主要电话:

this.addFirstTask = function(task) {
    var totalHours = GetHours();
    $.when(totalHours).done(function (data) {
        task.TaskHours(data);
        self.add(task);
    });
};

它正在调用以下ajax函数:

function GetHours() {
    $.ajax({
        url: "/api/tst/GetMyData",
        type: 'GET',
        dataType: 'json',

        success: function(data) {
           return data;
        },

        error: function(data) {
            return 0;
        }
    });
};

谢谢!

验尸:

除了将返回值添加到ajax调用之外,根据其他建议,我还从ajax调用中删除了成功与错误,并将addFirstTask更改为:

this.addFirstTask = function(task) {
    var totalHours = GetHours();
    $.when(totalHours)
     .then(function (data) {task.TaskHours(data);})
     .done(function () { self.add(task); });
};

如果GetHours成功,我将更新TaskHours值。如果失败,我就跳过它。我意识到DONE就像.NET的try / catch中的“
FINALLY”。因此,与其立即添加任务,然后让我的可观察的绑定在值返回时对其进行更新,甚至self.add也是异步调用的一部分。


问题答案:
function GetHours() {
    return $.ajax({
        ...
    });
};

$ .ajax()返回一个Promise。$
.when()接受一个Promises的集合,并返回一个Promise,当所有输入Promise完成时,该Promise将完成。then()是Promise上的一个方法(在这种情况下,包装是Promise的when()创建的),它首先调用它。当承诺成功解决时,函数arg。

因此,您的GetHours需要返回一个when()可以包装的Promise,然后调用then()。您实际上可以跳过when()部分,而只需从GetHours返回时调用.then即可。

您不会收到错误,因为.when()也可以使用任何旧对象,并且如果未实现Promise接口,它只会将其视为已完成的Promise。



 类似资料:
  • 问题内容: 我的document.ready()中有一些ajax调用 喜欢 : 我如何强制它等待,直到我们从ajax请求获得所有回叫之前不继续? 问题答案: 我根本不喜欢任何答案,最好的方法(自Jquery 1.5+起)是使用Deferred对象,这些是操纵异步调用的对象,可以解决: 这样,myFunc会在执行2个ajax调用之后执行,如果其中一个出错,则执行myFailure。 您可以在jque

  • 问题内容: 在下面,该语句在调用完成 之前 被执行。我该如何更改? 问题答案: 您不能-至少不明智。虽然可以在jQuery ajax请求上设置一个属性,但过去在尝试将其与值一起使用时遇到了 严重的问题。 尝试重新考虑您要完成的工作: 然后: 或者,如果您的回调 仅 需要访问返回的数据,那么您可以更简单地执行 然后

  • 我是一个新的反应,但我已经工作了很多年的Vue。当我需要等待一个动作完成时,我现在被困在一个区域。在操作完成后,我必须进行另一个操作调用或在那里执行一些操作。但它不会等待操作完成并开始执行下面的代码。 方法: 从其中调度操作的方法: 现在,在上面的代码中,重定向并不是在等待调度完成。我试过这个,但它不起作用:

  • 当集合中的文档存在或不存在时,我想返回True或False。但它总是返回错误。 我还在学习,谢谢你的帮助。

  • 我试图定期: 从ajax调用获取数据 将数据与div的内容进行比较 如果是数据!=div的内容:隐藏div、更改数据、显示div 这是我的密码: 问题在于,在div被完全隐藏之前,div内容被新数据替换,即使回调函数replace()被提供给hide()函数。 如何让hid()函数等待它的完成(在这个例子中是400毫秒),然后再调用替换()函数? 我还尝试了delay()和setTimeout()

  • 问题内容: 怎么可能 等到动作完成后再继续循环,我不能得到$ this var,因为它具有最后一个值,对不起我的英语,谢谢!!! 问题答案: 选项1:切换到处理程序中数组中的下一个元素。 选项2:同步发出Ajax请求: 全球: 或直接在请求中: });