【发布时间】:2016-06-21 07:25:36
【问题描述】:
在过去的两天里,我一直在试图找出承诺,到目前为止我已经做到了。任何有指导的方向都会很棒,因为我认为我很困惑。
所以这是我的服务,它必须在图像捕获后按超时顺序运行,以便服务器更新:
returnImage: function() {
var results = {};
function getCameraDirectory(){
// Get directory infomation from camera
var list = [];
deferred = $q.defer();
console.log("getCameraDirectory");
$http.get(BASE_URL + IMAGE_URL).then(
function(response){
$("<div>").html(response.data).find('a').each(function() {
var text = $(this).text();
if(text !== 'Remove'){
list.push(text);
}
});
if(results.hasOwnProperty("medialist")){
results["filelist"] = list.diff(results["medialist"]);
}else{
results["medialist"] = list;
}
deferred.resolve('getCameraDirectory')
},
function(error){
console.log(error);
deferred.reject(error);
});
}
function setCameraMode(){
// sets the camera mode to picture, multi-image, video
deferred = $q.defer();
console.log("setCameraMode")
$http.get(BASE_URL + '?custom=1&cmd=3001&par=0').then(
function(response){
if(response.status === 200){
results["mode"] = 'image';
deferred.resolve('setCameraMode');
}else{
deferred.reject("Counldnt change Camera mode");
}
},
function(error){
console.log(error);
deferred.reject(error);
});
}
function captureMedia(){
// starts the capture process picture, multi-image, video
console.log("captureMedia")
deferred = $q.defer();
$http.get(BASE_URL + '?custom=1&cmd=1001').then(
function(response){
if(response.status === 200){
results["date"] = Date.now();
deferred.resolve('captureMedia');
}else{
deferred.reject("Counldnt insiate image capture");
}
},
function(error){
console.log("error");
deferred.reject(error);
});
}
function saveMedia(){
console.log('saveMedia');
deferred = $q.defer();
console.log(results["filelist"]);
var mediaName = results["filelist"];
var url = BASE_URL + IMAGE_URL + mediaName;
var targetPath = cordova.file.externalRootDirectory + 'photoboothinabox/' + mediaName;
var filename = targetPath.split("/").pop();
$cordovaFileTransfer.download(url, targetPath, {}, true).then(function (response) {
deferred.resolve('saveMedia');
console.log('Success');
}, function (error) {
deferred.reject("Counldnt save to disk");
console.log('Error');
}, function (progress) {
// PROGRESS HANDLING GOES HERE
console.log(progress)
});
}
function test(){
console.log("past it")
}
var deferred= $q.defer(),
promise = deferred.promise;
promise.then(getCameraDirectory())
.then(setCameraMode())
.then(captureMedia())
.then(getCameraDirectory())
.then(saveMedia());
return promise;
},
到处都是……
附:我以建筑为生
【问题讨论】:
-
我觉得你可以用
$q.all -
您需要将回调传递给
then,而不是函数调用的结果 -
谢谢大家,我最终使用了带有 .catches 的 sjokkogutten 格式而不是错误,并使用 $q.all 来调用它们。现在,我拥有了可以单独调用的所有工厂方法,以及可以与它们一起调用的服务。感谢大家的帮助。
标签: javascript angularjs angularjs-service angular-promise angularjs-factory