2017-05-29 131 views
0

我有一個使用Monaca和AngularJS構建的跨平臺應用程序。 該應用使用允許用戶拍照的Camera插件。從回調中返回多個值

A有一個功能,可以拍攝照片,在該功能中,我想在成功拍攝照片時返回幾個值。

下面是我調用takePicture()函數並嘗試訪問返回值的方法。下面的兩個函數也是從不同的控制器/服務中調用的。

控制器

// 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; 
}); 
返回值

但是,測試拋出錯誤無法讀取未定義的屬性'photoCaptured'。

如何訪問從onSuccess回調返回的值?

+2

可能重複[如何從異步調用返回響應?](https://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-致電) – Andreas

+0

查看您問題的重複問題。順便說一句,這段代碼沒有意義'var photoCaptured,photoName; return {photoCaptured:true,photoName:imageURI}'你要創建一個對象,那些是屬性名稱,而不是變量 – quirimmo

回答

0

正如安德烈亞斯指出的 - THIS重複問題的答案解決了我的問題。在我的情況下,$ q.defer訣竅。

0

你分配到testPhoto.takePicture()的返回值,所以如果該函數沒有返回值,test仍將undefined和試圖訪問的test任何屬性將引發錯誤Cannot read property x of undefined