收藏
回答

For循环当中调用了函数,不渲染图层,给自定义组件传值产生数据值丢失,如何解决?

_getCategoryDetail(currentIndex) {
  const shoesID = this.data.categories[currentIndex].shoesID
  const details = this.data.categories[currentIndex]
  const categoryData = this.data.categoryData;
  for (let i = 0; i < shoesID.length; i++) {
      categoryData[currentIndex][i] = {
        title: "",
        image: ""
      }
      getShoesDetail(shoesID[i]).then(res => {
        categoryData[currentIndex][i].title = String(res.data[0]._shoesID)
        categoryData[currentIndex][i].image = String(res.data[0]._hostgraph)
      })
  }
  this.setData({
    categoryData

  })

console.log(categoryData[currentIndex])

},

--------------------------------------以上是category.js中的code---------------------------------------


<w-content categoryDetail="{{categoryData[currentIndex]}}"/>

-------------------------------------以上是category.wxml中的code---------------------------------------


把上方category.js中categoryData[currentIndex]传给下方w-content.js中的categoryDetail

-----------------------------------以下是自定义组件w-content中code-------------------------------------

properties: {

  categoryDetail: {
    type: Array,
    observer: function (newVal, oldVal) {
      console.log(newVal)
    }
  }
},

getShoesDetail为调用的查询数据库函数,外面的this.setData不渲染图层,以下是两边打印的结果

上方是w-content.js:9   下方是category.js:67 

回答关注问题邀请回答
收藏

1 个回答

  • 未命名科技
    未命名科技
    2019-08-14

    getShoesDetail(shoesID[i]).then 是异步请求,你 setData 时上面 promise 请求刚开始。一般将用 Promise.all 合并执行异步任务,结束后再 setData。你将 setData 直接放到 then 后面应该也是可以的,就是赋值多次,性能不好。

    2019-08-14
    有用 1
    回复 4
    • 郦斌
      郦斌
      2019-08-14
      放在里面可以的,不知道怎么使用Promise.all 合并执行异步任务
      2019-08-14
      回复
    • 未命名科技
      未命名科技
      2019-08-14回复郦斌
      这种文档类的知识搜索一下就有答案了。
      2019-08-14
      回复
    • 郦斌
      郦斌
      2019-08-14回复未命名科技
      const promise = new Promise((resolve, reject) => {
            if (shoesID !== undefined) {
              for (let i = 0; i < shoesID.length; i++) {
                getShoesDetail(shoesID[i]).then(res => {
                  categoryData[currentIndex][i] =  { title: res.data[0]._shoesID, image: res.data[0]._hostgraph }
                })
                console.log('---', i)
              }
            }
            console.log(1)
            resolve(categoryData)
          })
          promise.then((res) => {
            this.setData({
              categoryData: res
            })
            console.log(2)
            console.log(res)
          })
          this.setData({
            categoryData
          })
          console.log(3)
      Component({
        properties: {
          categoryDetail: {
            type: Array,
            observer: function (newVal, oldVal) {
              console.log('***', newVal)
            }
          }
        },


      使用了promise,setData还是不渲染图层

      2019-08-14
      回复
    • 未命名科技
      未命名科技
      2019-08-14回复郦斌
      你在 then 外面 resolve,并不是正确的时机啊,此时异步事件正在发生。还是再参考下 promise 下用法吧。
      2019-08-14
      回复
登录 后发表内容
问题标签