我正在从网页抓取数据,然后将其推送到数组,代码目前看起来像这样
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)
当我在请求中调用控制台日志时会记录数据,但是如果我在请求函数之外调用它,那么它将返回一个空数组。我知道我需要使用回调函数,但我想知道最好的方法是什么,因为我将在我的函数中发出多个请求。
答案 0 :(得分:0)
您应该使用promises而不是回调函数。 一个好的承诺库是Bluebird
您可以找到使用Promise而不是回调here
的示例每个函数都应该返回一个promise。您需要使用Promise.all
(link 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,它应该正常工作。