Tag: 延期

如何在Angular.js中实现承诺时始终运行一些代码

在我的Angular.js应用程序中,我正在运行一些asynchronous操作。 在开始之前,我用模态div覆盖应用程序,然后一旦操作完成,我需要删除div,无论操作是否成功。 目前我有这个: LoadingOverlay.start(); Auth.initialize().then(function() { LoadingOverlay.stop(); }, function() { LoadingOverlay.stop(); // Code needs to be duplicated here }) 它工作得很好,但我宁愿有一些像这样的伪代码清洁: LoadingOverlay.start(); Auth.initialize().finally(function() { // *pseudo-code* – some function that is always executed on both failure and success. LoadingOverlay.stop(); }) 我认为这是一个很常见的问题,所以我认为可以做,但在文档中找不到任何东西。 任何想法,如果可以做到?

AngularJS:在哪里使用诺言?

我看到一些使用Promise访问FB Graph API的Facebooklogin服务的例子。 示例#1 : this.api = function(item) { var deferred = $q.defer(); if (item) { facebook.FB.api('/' + item, function (result) { $rootScope.$apply(function () { if (angular.isUndefined(result.error)) { deferred.resolve(result); } else { deferred.reject(result.error); } }); }); } return deferred.promise; } 还有使用"$scope.$digest() // Manual scope evaluation"得到响应的服务 示例#2 : angular.module('HomePageModule', []).factory('facebookConnect', function() { return new function() { […]

如何使用jquery链接ajax调用

我需要在不locking浏览器的情况下进行一系列的N ajax请求,并且希望使用jQuery的延迟对象来实现这一点。 下面是一个有三个请求的简单例子,但是我的程序可能需要排队超过100个(请注意,这不是确切的用例,实际的代码确实需要在执行下一步之前确保步骤(N-1)的成功步): $(document).ready(function(){ var deferred = $.Deferred(); var countries = ["US", "CA", "MX"]; $.each(countries, function(index, country){ deferred.pipe(getData(country)); }); }); function getData(country){ var data = { "country": country }; console.log("Making request for [" + country + "]"); return $.ajax({ type: "POST", url: "ajax.jsp", data: data, dataType: "JSON", success: function(){ console.log("Successful request for [" + country […]

在所有的promise被调用之后,通过jQuery Deferreds循环

我目前正在尝试使用HTML5 FileAPI构buildfile upload器。 file upload器应该处理多个文件,并显示图像预览,如果该文件是一个图像。 由于FileReader类asynchronous工作,我想等到所有的文件都被读取。 所以我使用了Deferreds。 读取文件的方法是返回一个承诺。 另一种方法循环遍历所有文件,并将所有的承诺推送到一个数组中。 然后,我将所有的promise都添加到我的数组中,然后应用then()方法。 现在到我的问题。 由于then()方法只被调用一次 ,当我得到所有的承诺。 我没有机会处理每一个承诺。 我想要做的是,一旦他们都在那里循环所有的承诺,并返回结果。 这是我的FileProcessor对象 read: function(file) { var reader = new FileReader(); var deferred = $.Deferred(); reader.onload = function(event){ deferred.resolve(event.target.result); }; reader.onerror = function() { deferred.reject(this); } if(/^image/.test(file.type)) reader.readAsDataURL(file); return deferred.promise(); }, 这里是FileManager对象的handleFileSelect()方法,它应该调用FileProcessor.read()方法。 handleFileSelect: function(e){ var $fileList = $('#file-list'); var files = e.target.files; […]

如何使用jQuery承诺链接三个asynchronous调用?

我有三个需要我需要以同步方式进行的HTTP调用,以及如何将数据从一个调用传递给另一个? function first() { ajax() } function second() { ajax() } function third() { ajax() } function main() { first().then(second).then(third) } 我试图使用延迟的两个function,我想出了一个部分的解决scheme。 我可以扩展它为三个function? function first() { var deferred = $.Deferred(); $.ajax({ "success": function (resp) { deferred.resolve(resp); }, }); return deferred.promise(); } function second(foo) { $.ajax({ "success": function (resp) { }, "error": function (resp) { } […]

连锁的承诺没有通过拒绝

我有一个问题,理解为什么拒绝不通过承诺链传递,我希望有人能够帮助我理解为什么。 对我来说,将function附加到一系列的承诺意味着我的意图是我依靠一个原始的承诺来实现。 这很难解释,所以让我首先展示一个我的问题的代码示例。 (注意:这个例子是使用Node和延迟节点模块,我用Dojo 1.8.3testing过,结果相同) var d = require("deferred"); var d1 = d(); var promise1 = d1.promise.then( function(wins) { console.log('promise1 resolved'); return wins;}, function(err) { console.log('promise1 rejected'); return err;}); var promise2 = promise1.then( function(wins) { console.log('promise2 resolved'); return wins;}, function(err) { console.log('promise2 rejected'); return err;}); var promise3 = promise2.then( function(wins) { console.log('promise3 resolved'); return wins;}, […]