为什么以下 Parse 代码不返回错误?

Why isn't the following Parse code returning an error?

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

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)
  })
}

如果我在 store.reloadBuildings 中执行 console.log('BUILDINGS', buildings.toJSON())console.log 将停止输出任何内容,这意味着出现错误。但是,console.log('Error:', err) 也没有显示任何内容。

可能是我错误处理方式写错了?

编辑:

我也试过这个:

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

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

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

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

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

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

var promise = store.findBuildings();

promise.then(success, failure);

要响应 .then() 回调中抛出的错误,您必须绑定到 .then() 创建并返回的下一个 Promise。抛出的错误将导致 Promise 被拒绝。

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

var promise = store.findBuildings();

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

// same as...
var promise2 = promise.then(success);
promise2.fail(failure);