2017-09-04 62 views
0

我有一個離子/ angularjs應用程序,我試圖獲得SQLite的最後插入的ID,但是無論我嘗試什麼方式嘗試訪問承諾的對象中的變量來回到未定義。從諾言訪問項目

我的承諾是;

$ionicPlatform.ready(function() { 
     $cordovaSQLite.execute(db, query, parameters) 
     .then(function (result) { 
      q.resolve(result); 
     }, function (error) { 
      console.warn('I found an error'); 
      console.warn(error); 
      q.reject(error); 
     }); 
    }); 
    return q.promise; 

它是由被稱爲:

self.addPicture = function(photo) { 
    var parameters = [photo.base64]; 
    console.log("INSERT INTO AssetPhotos (id, base64) VALUES (NULL,?)", parameters); 
    var id = DBA.query("INSERT INTO AssetPhotos (id, base64) VALUES (NULL,?)", parameters); 
    return id; 
    } 

然後在實際代碼:

Assets.add($scope.addasset); 
    var i = 0; 
    for (pic in $scope.photos) { 
     console.log(Assets.addPicture($scope.photos[i])); 
     i++; 
    } 

但是,它返回:

Promise {$$state: Object} 
$$state: Object 
status: 1 
value: Object 
insertId: 20 
rows: Object 
rowsAffected: 1 
__proto__: Object 
__proto__: Object 
__proto__: Promise 

(或看到它更容易)

enter image description here

我想要實現的是,執行console.log(Assets.addPicture($ scope.photos [1]))僅返回insertId。我試着加入.value.InsertId和.InsertId但forwhatever原因,我似乎無法得到公正的InsertId回用它

編輯:我已經更新的代碼下面這看起來正確之後的參數列表

$scope.addAsset = function(){ 
    Assets.add($scope.addasset); 
    var i = 0; 
    for (pic in $scope.photos) { 
     Assets.addPicture($scope.photos[i]) 
     .then(res => console.log(res.insertId)) 
     i++; 
    } 
    } 

回答

1

不能CONSOLE.LOG()除外。那麼內部的承諾的回報缺少的東西),但我得到一個錯誤:未捕獲的 的SyntaxError。據我瞭解你的代碼,這可能工作,或類似的:

Assets.add($scope.addasset); 
var i = 0; 
for (pic in $scope.photos) { 
    Assets 
    .addPicture($scope.photos[i]) 
    .then(res => console.log(res.insertId)) // logging out here 
    i++; 
} 
+0

這實際上是很有道理的。謝謝 - 更多快速的東西,代碼錯誤與Uncaught SyntaxError:失蹤)在參數列表後,但括號看起來很好給我 – TMB87

+0

可能額外parens其他地方呢? – ehacinom

+0

這將是明顯的答案,但我真的不知道在哪裏 – TMB87