var util = require('../../utils/util')
Page({
data: {
book: {}
},
onLoad: async function (options) {
var { data: res } = await util.http(`/book/${options.id}/detail`, "GET")
res.summary = res.summary.replace(/\\n/g, "\n");
console.log(this.data)
this.setData({
book: res,
id: options.id
})
},
onReady: function () {
this.getCommentsList()
},
getCommentsList: function () {
console.log(this.data)
console.log(this.data.id)
}
})
在getCommentsLis函数中,第二行打印一直都是undefined,但是第一行却能获取到数据
实在想不懂,为啥会这样,请各位大哥帮忙看一下,谢谢!!
异步的原因,onLoad还没执行完就onReady去请求读取值了。 你改这样试试: var util = require('../../utils/util') Page({ data: { book: {} }, onLoad: async function (options) { }, onReady: function () { var { data: res } = await util.http(`/book/${options.id}/detail`, "GET") res.summary = res.summary.replace(/\\n/g, "\n"); console.log(this.data) // ---第9行 this.setData({ book: res, id: options.id },()=>{ this.getCommentsList() }) }, getCommentsList: function () { console.log(this.data) // ---第19行 console.log(this.data.id) // ----第20行 } })
大哥 同步异步了解下???你前面是请求接口成功后触发的setData,而在你请求还未成功的时候onReady就已经执行了,相当于你setData还没触发就走了取this.data.id这一步 肯定是undefined啊。。你下面的this.getCommentsList()放到setData后。或者使用promise进行处理 this.setData({ id: options.id }, () => { this.getCommentsList() })
onLoad: async function (options) {
this.setData({
id: options.id
})
const res = await util.http(`/book/${options.id}/detail`, "GET")
res.summary = res.summary.replace(/\\n/g, "\n");
console.log(this.data) // ---第9行
this.setData({
book: res
})
},
var app = getApp()
function http(url, method, data) {
var appkey = app.globalData.appkey
if (data && method === 'GET') {
appkey = '&' + appkey;
} else {
appkey = '?' + appkey;
}
return new Promise((resolve, reject) => {
wx.request({
url: app.globalData.QiyueUrl + url + appkey,
method: method,
data: data ? data : {},
success: (res) => {
resolve(res)
},
fail: (err) => {
reject(err)
}
})
})
}
module.exports = {
http: http
}
这是接口异步导致的
你在onload中增加了同步可以选择将 getCommentsList方法在onload中执行
若有帮助请帮忙点个"有用"谢谢↓↓
this.setData({
id: options.id
})
微信小程序真机ios不触发onReady是什么原因