Я использую $window.location(url)
для загрузки файла csv непосредственно из rest api.
Мне нужно отобразить сообщение о успехе, хотя я использую обещания, файл загружается, но я не могу показать сообщение об успешном завершении.
function download() {
getcsv().then(function(response) {
if (response === 'success') {
$scope.msg = 'success';
}
})
}
getCSV() {
var defer = $q.defer;
downloadCSV();
return defer.promise;
}
function dowloadcsv() {
$window.location(url);
}
Вы можете использовать $ timeout-сервис, который возвращает обещание:
app.factory('downloadService', function($q, $window, $timeout) {
return {
download: function(url) {
var defer = $q.defer();
$timeout(function () {
$window.location.href = url;
}, 1000)
.then(function () {
defer.resolve('success');
}, function () {
defer.reject('error');
});
return defer.promise;
}
}
}
Если приведенный выше код не является альтернативой, попробуйте использовать $ q.resolve внутри вашей функции loadcsv.
$timeout
вы задерживаете «загрузку» на столько миллисекунд (что может быть, вы хотите, idk). Кроме того, $timeout
самом деле ничего здесь не выполняет, потому что он всегда будет возвращать успех в этом примере (это потому, что обещание в $ timeout будет отклонено, только если вы отмените его с помощью docs.angularjs.org/api/ng/service/ $ timeout # отменить ).
function download(){ getcsv().then(function(response){ if(response==='success') { $scope.msg='success';} }) } getCSV(){ var defer=$q.defer; downloadCSV(); return defer.promise; } function dowloadcsv(){ $window.location(url); }