0

我有两个功能:一个获取对象,另一个将这些对象分配给对象的属性:

var Building = Parse.Object.extend('Building')

store.findBuildings = () => {
  var query = new Parse.Query(Building)
  return query.find({
    success: function (building) {
      console.log('Succes:', building)
    },
    error: function (building, error) {
      console.log('Error:', error.message)
    }
  })
}

store.reloadBuildings = (obj, prop) => {
  store.findBuildings().then(buildings => {
    console.log('BUILDINGS', buildings)
    let buildings2 = _.map(buildings, (building) => building)
    console.log('BUILDINGS 2', buildings2)
  }, function (err) {
    console.log('Error:', err)
  })
}

如果我console.log('BUILDINGS', buildings.toJSON())在sstore.reloadBuildingsconsole.log停止输出任何内容,则意味着出现错误。但是,console.log('Error:', err)也不显示任何内容。

也许我以错误的方式编写了错误处理?

编辑:

我也试过这个:

}).catch(err => {
  console.log('Error:', err)
})

但我得到:Uncaught TypeError: store.findBuildings(...).then(...).catch is not a function

4

1 回答 1

2

Parse 的 SDK 使用的 Promise 并不完全符合 ES6 Promises - 可能它们是在标准最终确定(2015 年 6 月)之前实现的。

他们的实现定义了一个.fail()方法而不是标准.catch()

}).fail(err => {
  console.log('Error:', err)
})

在第一个片段中,console.log('Error:', err)未调用的原因是因为回调绑定到 Promise from store.findBuildings(),该 Promise 已解决,因此它自己的任何.fail()回调都没有用。

var promise = store.findBuildings();

promise.then(success, failure);

要响应.then()回调中抛出的错误,您必须绑定到由.then(). 抛出的错误将导致该 Promise 被拒绝。

而且,这就是您在编辑中尝试做的事情。

var promise = store.findBuildings();

promise.then(success).fail(failure);

// same as...
var promise2 = promise.then(success);
promise2.fail(failure);
于 2016-02-22T04:12:31.400 回答