等待JS函数中的异步调用结束。(jQuery.Deferred吗?)

亚历克斯

这是我的(简单)问题:

我有一个Javascript函数,该函数调用外部API以便异步获取一些结果。我需要等待这些结果,因为我想对它们进行一些测试以确定它们是否有效,但Deferred对我来说非常复杂,我无法成功。

这是我所做的:

$("#step-content").steps({
    //some parameters
    onStepChanging: function(event, currentIndex, newIndex) {
        verifyAddress().done(function(test) {
            if($("#hdnLatitude").val() == "" || $("#hdnLongitude").val() == "")
                test = false;
            else
                test = true;

            console.log(test); // test is true or false, that's good
            return test;
        });

        console.log(test); // test is always empty here

        //Here, I just need to do return true or return false to block step-changing if there is an error.
        return test;
    }
});

基本上,这是我的verifyAddress功能:

function verifyAddress() {
    var r = $.Deferred();

    var geocoder = new google.maps.Geocoder();
        if (geocoder) {
            var adressToGeocode = /* Get the address to geocode */

            geocoder.geocode({ 'address': adressToGeocode }, function (results, status) {
                if (status == google.maps.GeocoderStatus.OK) 
                {
                    //Save the lat/lng returned in #hdnLatitude and #hdnLongitude
                }

                r.resolve();
            });
        }
    //Not sure where to place the return r ; try elsewhere but no success
    return r;
}

所以,我需要的是等待结束verifyAdress()并获得#hdnLatitude#hdnLongitude满了,假的在返回trueonStepChanging事件,以确定我们是否能够进入下一步骤(地址即可),而不是(地址是错的)

我正在使用这个SO问题来更好地理解Deferred,但我无法成功。
有人可以帮助我吗?

非常感谢

亚历克斯

好的,正如@Bergi所说,使用此插件似乎无法实现。

因此,我绕过了这个问题,将Next按钮替换为伪造按钮,该伪造按钮调用了异步事件。在此事件结束时,如果结果正常,我将Next按钮替换为我克隆的原始按钮,并触发按钮上的一个click事件以传递到下一步,而无需用户单击两次。

不知道它是否真的很干净,但是可以满足我的需求

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

异步方法中的最后一个异步调用需要等待吗?

不等待异步调用仍然是异步的,对吗?

Deferred.callback()或Deferred.errback()可以向调用方引发异常吗?

等待最后一个异步调用和只返回它之间有区别吗?

解决后,我可以强制jQuery Deferred / Ajax执行失败处理程序吗?

我必须等待已经异步的useEffect中的异步函数吗?

jQuery Deferred无法与getJSON调用异步执行

可以异步调用jdbc吗?

不能通过异步调用的函数加入Python调试器吗?

无法等待 Javascript 中的异步调用

无法等待异步调用中的对象

长API调用-异步调用答案吗?

这是Deferred的好用例吗?

nodejs调用异步函数后跟等待还是同步函数有什么优势吗?

QML与多线程/异步调用兼容吗?

window.setTimeout用于处理异步调用同步吗?

可以简化此并行异步调用吗?

NotifyDataSetChanged- RecyclerView-是异步调用吗?

NavigationTimingAPI 可以用于异步调用吗?

如何在同步函数中等待JavaScript中的异步调用?

可以在构造函数中调用异步方法吗?

流函数调用在Google Dart中是异步的吗?

在Swift中,我有一个函数,该函数以递归方式复制文件夹,并使用异步调用。我想添加一个完成处理程序。有什么优雅的解决方案吗?

如何在返回Deferred <T>的异步函数中延迟

在JavaScript中等待异步调用在Node js中没有console.log

NodeJS:在异步/等待中更好地使用回调函数或同步函数吗?

Javascript Promise与jQuery Deferred

jQuery Deferred尽早解决

等待XCTestCase的setUp()中的多个异步调用