云函数返回值是数组,如果数组中值为 json,则返回内容出错

云函数中返回值为数组,如果数组里面的有某个对象的 toJSON() 内容,则返回的结果不包含这个对象的内容。返回的内容为:

{
    "result": [
        {
            "6rmd6t5st": 8,
            "_subscribers": []
        },
        {
            "6rmd6t5st": 13,
            "_subscribers": []
        },
        {
            "6rmd6t5st": 18,
            "_subscribers": []
        }
    ]
}

请问你 Node SDK 的版本是多少?返回响应的代码是怎么写的?

我是在 云引擎 → 部署 → 当前部署 → 在线编辑 里面写的云函数代码。

返回响应的核心代码逻辑:

var booksList = ["5cc9897", "5c70fc835", "5c70dbb"]
var codeList = []

for( var i = 0; i < booksList.length; i++) {
    var query = new AV.Query('promo')
    query.equalTo('bookID', booksList[i])
    query.equalTo('userID', null)
    codeList[i] = query.first().then(function(results) {
        results.set('userID', request.params.userID)
        results.save()
        return results
    }) 
}

return codeList

返回结果为:

{
    "result": [
        {
            "aquuo1h1twi": 8,
            "_subscribers": []
        },
        {
            "aquuo1h1twi": 13,
            "_subscribers": []
        },
        {
            "aquuo1h1twi": 18,
            "_subscribers": []
        }
    ]
}

这里你直接赋值肯定是不行的,要在 query.first().then( ... )results.save() 之前加 await

非常感谢,问题已经修复,按照你的建议完善后的代码为:

var booksList = ["5cc9897", "5c70fc835", "5c70dbb"]
var codeList = []

for( var i = 0; i < booksList.length; i++) {
    var query = new AV.Query('promo')
    query.equalTo('bookID', booksList[i])
    query.equalTo('userID', null)
    codeList[i] = await query.first().then(sync function(results) {
        await results.set('userID', request.params.userID)
        await results.save()
        return results
    }) 
}

return codeList