【问题标题】:Unable to paginate on a callback function无法对回调函数进行分页
【发布时间】:2017-03-23 17:33:20
【问题描述】:

我正在尝试对回调函数的调用进行分页,但在第二次调用时出现错误

我的功能是:

        let content = ''

    let size = 100
    let from = 1

    function result(size, from, callback) {
        api.performRequest('/myContents', 'GET', {
            pageSize: size,
            startFrom: from,
            filter:'NOT contents:[* TO *]',
        }, function (data) {
            content += JSON.stringify(data)
            callback()
        })
    }

    function logContent() {
        const parsed = JSON.parse(content)
        console.log('content length: ', parsed.body.length)

        if (parsed.body.length === size) {
            calculate(size, from + size)
        }
    }

    function calculate(size, from) {
        result(size, from, logContent)
    }

    calculate(size, from)

第一次调用控制台返回

内容长度:100

在第二次通话中,我在日志中获取了所有 json 块并出现错误

JSON 中第 32847 位的意外令牌 {

我认为这与回调有关,并且在函数完成之前发生了一些事情,但我无法看到我在这里做错了什么

函数 performRequest 只是做一个 http get 并返回一个 json 块

export function performRequest(endpoint, method, data, callback) {

const headers = {
    Authorization: auth,
    'Content-Type': 'application/json; charset=utf-8',
    'Access-Control-Expose-Headers': 'Location,ETag',
}

let options = {
    host: host,
    port: port,
    path: endpoint,
    headers: headers,
}

if (method === 'GET') {
    endpoint += '?' + queryString.stringify(data)
    const additionalOptions = {
        path: endpoint,
    }

    options = _.merge(options, additionalOptions)
}

return http.get(options, function (response) {
    // Continuously update stream with data
    let body = ''
    response.on('data', function (d) {
        body += d
    })
    response.on('end', function () {

        // Data reception is done
        const parsed = JSON.parse(body)
        callback({
            totalCount: parsed.totalCount,
            body: parsed.content,
        })
    })
})
}

【问题讨论】:

    标签: javascript node.js express ecmascript-6


    【解决方案1】:

    您的第一个电话会很好,因为您的内容一开始是空的。所以,在第一次通话期间:

    content = '' --> content = '{...}'
    

    你的第二个电话:

    content = '{...}' --> content = '{...}{...}'
    

    因此错误:

    JSON 中第 32847 位的意外令牌 {

    您需要将每个对象放入一个数组中,如果您希望它起作用,甚至可以放入另一个对象中。您可以在每次调用时创建一个数组并 push 将每个元素放入其中。

    【讨论】:

    • 你是完全正确的,tkx 很多@Ksyqo。重置内容或使用数组都可以正常工作。
    猜你喜欢
    • 2018-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-31
    • 1970-01-01
    相关资源
    最近更新 更多