我有一个使用Monaca和AngularJS构建的跨平台应用程序。该应用程序使用允许用户拍照的相机插件。
有一个拍摄照片的函数,在该函数中,我想在成功捕获照片时返回一些值。
下面是我调用takePicture((函数的方法,以及尝试访问返回的值。下面的 2 个函数也是从不同的控制器/服务调用的。
控制器
// Take photo
$scope.takePicture = function () {
var test = Photo.takePicture();
alert("photoCaptured: " + test.photoCaptured + "nphotoName" + test.photoName); // Error here
};
下面是 takePicture(( 函数,它触发相机并在 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;
});
但是,测试抛出错误无法读取未定义的属性"照片捕获"。
如何访问从 onSuccess 回调返回的值?
您正在将test
分配给Photo.takePicture()
的返回值,因此如果该函数不返回值,test
将保持undefined
,并且尝试访问test
的任何属性将抛出错误Cannot read property x of undefined
。
正如安德烈亚斯所指出的 - 这个重复问题的答案解决了我的问题。就我而言,$q.defer 做到了。