NodeJS在请求函数内创建回调

时间:2017-10-23 10:30:04

标签: javascript node.js callback

我正在从网页抓取数据,然后将其推送到数组,代码目前看起来像这样

    let lblNew = UILabel(frame: CGRect(x: x, y: y, width: width, height: width))
    lblNew.backgroundColor = UIColor.clear
    lblNew.text = "Label Text"
    lblNew.textColor = UIColor.black
    view.addSubview(lblNew)

当我在请求中调用控制台日志时会记录数据,但是如果我在请求函数之外调用它,那么它将返回一个空数组。我知道我需要使用回调函数,但我想知道最好的方法是什么,因为我将在我的函数中发出多个请求。

2 个答案:

答案 0 :(得分:0)

您应该使用promises而不是回调函数。 一个好的承诺库是Bluebird

您可以找到使用Promise而不是回调here

的示例

每个函数都应该返回一个promise。您需要使用Promise.alllink to documentation)“等待”完成所有承诺。 然后,您可以将其全部写入日志

以下是一个例子:

const rp = require('request-promise'); // A package for Request with Bluebird promises 
const Promise = require('bluebird');

const url = //url 
let data = [];

const options = {
    uri: url
};

const p1 = rp(options).then((response) => {
    var $ = cheerio.load(response.body);

    $('#id').each(function (i, element) {
        data_element = //(this).find...
        data.push(data_element);
    });

    console.log(data); //console logs the data inside the request

    return data; // this data will be available on results parameter on Promise.all 
});


const p2 = // another request

Promise.all([p1, p2]).then((results) => {
    console.log(results) // print whatever you want
})

答案 1 :(得分:-1)

我认为这是因为“let”类型的变量会阻止它。将其更改为var,它应该正常工作。