为什么以下_.map函数什么都不返回?

时间:2016-01-19 14:04:11

标签: javascript ecmascript-6

我创建了一个查找对象的函数:

store.js

store.find = () => {
  const query = new Parse.Query(Document)
  return query.find()
}

我这样使用(并将值分配给this.documents):

main.js

store.find().then((results) => {
  this.documents = _.map(results, (result) => {
    return result.toJSON()
  })
})

有效。但store.find().then( ...)部分在main.js中重复多次,因此我将其转换为函数:

store.js

store.fetch = (documents) => {
  return store.find().then((results) => {
    documents = _.map(results, (result) => {
      return result.toJSON()
    })

  })
}

我使用的是这样的:

main.js

store.fetch(this.documents)

但没有为this.documents分配任何内容,也没有错误消息。可能是什么问题?

注意: this.documents是一个对象数组。例如:

[{
  title: this.title,
  content: this.content,
}, ...

编辑:

我这样做了:

store.fetch = (documents) => {
  store.find().then((results) => {
    documents = _.map(results, (result) => {
      return result.toJSON()
    })
    console.log(documents)
  })
}

正在分配documents

[Object, Object, Object, ...]

所以我认为它不会将此数组分配给this.documents。也许变量不能成为参数并同时赋值?

2 个答案:

答案 0 :(得分:2)

您正在传递this.documents作为参数并尝试在函数内修改该属性。但是,这不起作用,因为Javascript does not have "pass by reference"。只有"传递价值"。

相反,您可以尝试单独传递对象和属性名称:

store.fetch = (obj, prop) => {
  return store.find().then((results) => {
    obj[prop] = _.map(results, (result) => {
      return result.toJSON()
    })
  })
}
store.fetch(this, 'documents')

答案 1 :(得分:1)

尝试在.then之后的store.fetch(this.documents)阻止中获取结果。并且不要忘记存储上下文

var self = this;
store.fetch(self.documents).then(function () {
    console.log(self.documents);
});

或者使用es6

store.fetch(this.documents).then(() => {
    console.log(this.documents);
});