从回调中返回多个值

时间:2017-05-29 16:05:57

标签: javascript angularjs callback

我有一个使用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 回调中返回的值?

2 个答案:

答案 0 :(得分:0)

您将test分配给Photo.takePicture()的返回值,因此如果该函数未返回值,则test将保留undefined并尝试访问任何值test的属性将抛出错误Cannot read property x of undefined

答案 1 :(得分:0)

如安德烈亚斯所述 - THIS重复问题的答案解决了我的问题。在我的情况下, $ q.defer 就可以了。