从承诺中访问项目

时间:2017-09-04 19:30:52

标签: javascript angularjs ionic-framework

我有一个离子/ angularjs应用程序,我正在尝试获取SQLite的最后一个插入ID,但无论我尝试什么方式,我尝试访问promise中的变量作为undefined返回。 / p>

我的承诺是;

 $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 [i]))只返回insertId。我已经尝试添加.value.InsertId和.InsertId,但无论出于何种原因,我似乎无法让InsertId重新使用它

修改:我已将代码更新为以下内容,但看起来没问题,但是我收到了错误消息: 参数列表

之后的Uncaught SyntaxError:missing)
$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 个答案:

答案 0 :(得分:1)

除了.then之外,你不能将console.log()作为Promise的返回内容。据我了解您的代码,这可能有用,或类似的东西:

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++;
}