$ q.all()을 사용하여 약속이 해결 될 때까지 기다리려고합니다. 이 목적을 위해 약속 배열을 만들고 all () 메서드에 전달했지만이 방법은 작동하지 않습니다. 약속 배열은 각 반복에서 생성되는 $ resource 객체에 의해 반환 된 약속으로 채워져 있습니다. 약속 배열이 비동기 적으로 채워지기 때문에 문제가 있다고 생각합니다.
$ q.all() 메서드가 반환하는 약속, 약속 배열은 항상 빈 배열이므로이 결론에 도달했습니다. 그것은 $ q.all() 메소드가 배열이 채워지는 것을 기다리지 않는 것과 같습니다. 그러나 그것이 문제인지 확실하지 않습니다.
$ q.all()을 사용하여 원하는 것을 얻을 수 없다면 정말 도움이 될 것입니다. 모든 약속이 해결 된 후에 다른 방법으로 코드를 실행하고 싶습니다. 여기
내가 현재 약속의.then
방법은 데이터가 반환에서 새 약속을 반환
var promisesArray = [];
var images, postObject;
files.readFile('images.txt')
.then(function (data) {
images= angular.fromJson(data);
images.forEach(function (image, idx) {
var deferred = $q.defer();
if (!image.sent) {
files.readFile(image.name)
.then(function (data) {
postObject = angular.fromJson(data);
$resource(EndPointsService.baseURL + "images").save(postObject, function(data) {
deferred.resolve(data);
if (data.status) {
image.sent= true;
}
},function(error){
console.log(error);
});
promisesArray.push(deferred.promise);
},function(error){
console.log(error);
});
}
});
$q.all(promisesArray).then(function (data) {
console.log(data);
files.writeFile("images.txt", images)
.then(function (data) {
console.log(data);
}, function (error) {
console.log(error);
});
});
},function(error){
console.log(error)
});
당신은 비동기'readFile' 통화 이외의 약속 배열에 약속을 밀어해야합니다
는.then
방법 및 return 안에 그.then
방법에$q.all
약속을 약속 배열 을 만듭니다. 위의 지연을 만들었으므로 배열에 추가 할 수 있습니다. – anson내가 "그걸 잘 놓아야한다"고 말할 때, 다음 줄에 지연 선언이 나온다는 뜻인가요? –
글쎄, 기술적으로 당신은 if 서술문 위에 연기했다. 따라서 조건이 거짓이면 아무 이유없이 지연을 생성했습니다. 지연된 생성과 추가를 조건문 안의 배열에 넣어야합니다. – anson