Tag: promise

为什么我的承诺没有返回任何价值?

在这个稍微减少的代码中,一周一次从API下载一周或多周的观察,并聚合rows并导出到CSV。 至少这是个主意。 实际发生的是Uncaught (in promise) TypeError: Cannot read property ‘toString’ of undefined在(未显示) exportToCsv函数中引发,因为从_promise推送到rows promiseArray是undefined 。 我错过了什么? $(“#downloadBtn”).click(function() { weeks = getWeeks(startDate.val(), endDate.val()); // array like [[startDay1, endDay1], [startDay2, endDay2], …] // start downloading the data var promiseArray = []; for (i=0; i< weeks.length; i++) { var _promise = Q.defer(); fetchDataWeek( weeks[i][0], weeks[i][1], _promise ); promiseArray.push(_promise) […]

jQuery Ajax等待每个函数

$xy(‘#simpan’).click(function() { $xy(‘input[id=”cekbok[]”]:checked’).each(function() { var data = (this.value); var div = (this.value); var str = window.location.href; var res = str.replace(“wp-admin/options-general.php?page=katalogu-options”, “/wp-content/plugins/katalog/includes/img/loading.gif”); var loading = (”) ; $xy.ajax({ type : ‘POST’, url : ‘../wp-content/plugins/katalogunique/proses2.php’, data: { id : (this.value) }, success:function (data) { $xy(‘#result’+div).empty(); $xy(‘#result’+div).append(data); $xy(‘#tz’+div).remove(); } }); }); }); 我的函数在循环中向proses2.php发送复选框值,但是当我运行此脚本时,它将立即运行所有ajax POST调用。 我想逐个运行ajax请求或等到完成,我该如何解决这个问题?

通过用户输入来限制jquery .then链

这可能是一个简单的问题,但我完全迷失了。 我有这个function。 m.util.genericSwipeVertFunc = function ( ajaxRequest, swipeOutTarget, swipeInTarget ) { var stage1, stage2, failStage, dfd = $.Deferred(), finalStage, functionPromise; // Swipe of screen wait for ajax request stage1 = function () { return $.when( ajaxRequest, // Returns $.Deferred() m.util.animateDeffered(swipeOutTarget, “fadeOutDown”, true) // Returns $.Deferred() ); }; // Swipe and Show stage2 = function () […]

如何将回调样本转换为延迟对象?

我有一个接受回调函数的函数,我将数据传回来。这可以转换为延迟对象以便更好地练习吗? 这是我得到的: var chapters; var getChapters = function (fnLoad) { //CACHE DATA IF APPLICABLE if (!chapters) { //CALL JSON DATA VIA AJAX $.getJSON(‘/chapters.txt’) .done(function (json) { //STORE DATA IN LOCAL STORAGE chapters = Lawnchair(function () { this.save(json, function (data) { //CALL CALLBACK ON DATA fnLoad(data); }); }); }); } else { //RETURN ALREADY CREATED LOCAL […]

为什么在调用多次设置新$ .Deferred的函数时,我的延迟对象设置为已解决而不是挂起?

我试图让jQuery deferred工作并遇到一些问题。 我的系统使用postMessage从网站上的沙箱区域传递消息。 因此,当我从沙盒区域请求服务时,如下所示: // on click of button foo.requestService(options, function (response) { $(“#c”).val(response); // set value of input button } 在内部,我每次单击按钮时都会创建一个new $.deferred并且请求服务,如下所示: that.requestService = $.fn.requestService = function (options, callbackFunction) { var deferred = new $.Deferred(), callbackId = priv.generateUuid(), callback = deferred; // store callback to be retrieved by response handler priv.trackCallback(callbackId, callback, callbackFunction); // […]

jQuery链接和级联然后是什么时候

我目前在我面前有一个非常棒的if-then-else循环,它首先从web服务获得多个cantinas。 然后它会获得所有可用餐点(每个菜单)和所有可用的配菜(每个菜单)。 对于每一餐和两餐,然后检查所有添加剂并聚集它们。 最后, 我有多种菜单,包括餐点,配菜和所有添加剂。 以下流程图显示了该过程: 我想美化代码,并希望利用jQuery的promises – 但我无法弄清楚如何做到这一点,因为我必须在一段时间之后堆叠一个(至少我认为,也许我必须resolve ?) 。 以下是我最好的尝试: //this totally does not work at all, but you get the idea what I want to do Menus.getCantinas() .when(Menus.getMeals(cantinas), Menus.getSides(cantinas)) //when doesn’t exist here, neither does cantinas .then(Menus.getAdditives(meals, sides) //also throws errors as meals and sides does not exist .done(function(cantinas, meals, sides, additives) […]

我何时应该拒绝承诺?

我正在写一些使用promises的JS代码。 例如,我打开一个表单弹出窗口,然后返回一个jQuery Deferred对象。 它的工作原理如下: 如果用户在表单上单击“确定”并进行validation,则“延迟”将解析为表示表单数据的对象。 如果用户单击“取消”,则“延迟”将解析为空。 我想要决定的是Deferred应该拒绝而不是解决? 更一般地说,我想知道什么时候应该解决类似空对象的问题,什么时候应该拒绝? 这里有一些代码展示了两个位置: // Resolve with null. var promise = form.open() .done(function (result) { if (result) { // Do something with result. } else { // Log lack of result. } }); // Reject. var promise = form.open() .done(function (result) { // Do something with result. }) .fail(function () […]

然后jQuery Promise在AJAX之后无法工作

我的Promise定义如下: myFunc = function() { $.getJSON(“./rest/api/some/url”, function(json, textStatus) { console.log(“AJAX call hit!”); }); }; $.when(myFunc()).then(function() { console.log(“Then block hit!”); }); 并在控制台中输出为: Then block hit! AJAX call hit! 我需要AJAX call hit! 首先跟着Then block hit! 。 知道为什么会这样吗? 我甚至试图实现一个自定义回调函数(我在Stackoverflow上找到的标准示例),它仍然无法正常工作。

在JavaScript中,如何在超时中包装一个promise?

这是使用deffered / promise实现某些异步函数超时的常见模式: // Create a Deferred and return its Promise function timeout(funct, args, time) { var dfd = new jQuery.Deferred(); // execute asynchronous code funct.apply(null, args); // When the asynchronous code is completed, resolve the Deferred: dfd.resolve(‘success’); setTimeout(function() { dfd.reject(‘sorry’); }, time); return dfd.promise(); } 现在我们可以执行一些名为myFunc异步函数并处理超时: // Attach a done and fail handler for […]

强制jQuery延迟等到Ajax在“then”处理程序中完成

我有这样的情况,我认为我需要使用“then”处理程序创建一个Deferred对象,但是等到“then”处理程序完成它自己的承诺后再继续。 用例是一个记录对象,上面的函数是它的保存方法。 记录对象有一个名为saveQueue的属性,在记录的实例化中设置为$ .Deferred()。 对saveQueue的解析调用应该确保Deferred总是会尽可能快地执行附加到它的每个新处理程序。 这个想法是你可以在短时间内在记录上多次调用save,但调用会一个接一个地运行,而不是重叠。 我正在使用Deferred来排队Ajax调用,以便在前一次调用完成之前不会运行。 但是,从同一个方法,我想返回一个可以被jQuery Ajax对象解析/拒绝的Deferred,如下所示: record.saveQueue = $.Deferred(); self.save = function( record ){ var deferredAction = $.Deferred(); deferredAction.then(function() { return $.post(“/example_save_endpoint”); }); record.saveQueue.always(function(){ deferredAction.resolve(); }).resolve(); return deferredAction; } 但是,当我使用此代码时, deferredAction承诺总是最终resolved ,大概是因为#then处理程序返回一个“挂起”(因而是非拒绝)的承诺。 在解决/拒绝之前,有没有办法强制Deferred等待Ajax承诺完成? 还是有另一种更好的方法来穿针吗?