我有一个使用Monaca和AngularJS构建的跨平台应用程序。 该应用程序使用相机插件,允许用户拍照。
A有一个拍摄照片的功能,在该功能中我想在成功拍摄照片时返回一些值。
下面是调用takePicture()函数的方法,同时尝试访问返回的值。下面的两个函数也可以从不同的控制器/服务中调用。
控制器
// Take photo
$scope.takePicture = function () {
var test = Photo.takePicture();
alert("photoCaptured: " + test.photoCaptured + "\nphotoName" + test.photoName); // Error here
};
下面是 takePicture()函数,它触发Camera并返回 onSuccess 回调中的值
服务
// Get the main app.js module
var photo = angular.module("photo", []);
photo.service("Photo", function () {
var myFunctions = {
// Take picture
takePicture: function () {
var onSuccess = function (imageURI) {
var photoCaptured, photoName;
return { photoCaptured: true, photoName: imageURI } // Should return multiple values
}
var onFail = function (error) {
alert("AN ERROR HAS OCCURED" + "\nPhoto capture failed." + error);
}
var options = { quality: 50, destinationType: Camera.DestinationType.FILE_URI};
navigator.camera.getPicture(onSuccess, onFail, options);
},
}
return myFunctions;
});
但是, test 会抛出错误无法读取未定义的属性“photoCaptured”。
如何访问 onSuccess 回调中返回的值?
答案 0 :(得分:0)
您将test
分配给Photo.takePicture()
的返回值,因此如果该函数未返回值,则test
将保留undefined
并尝试访问任何值test
的属性将抛出错误Cannot read property x of undefined
。
答案 1 :(得分:0)
如安德烈亚斯所述 - THIS重复问题的答案解决了我的问题。在我的情况下, $ q.defer 就可以了。