【发布时间】:2018-11-30 14:53:20
【问题描述】:
我希望你能帮助我,因为要解决这个问题需要几个小时。我用谷歌搜索了很多并尝试了我找到的所有解决方案,但我一直收到同样的错误。 我试图让轴获取对 API 的请求,该 API 为每页 1 个结果分页,循环遍历所有结果,并使用 promise 数组解决 promise。 我已经验证,没有循环,只收到 1 个请求,一切正常。我已经使用 MongoDB 驱动程序成功写入 MongoDB,并且很好。一旦我引入循环,我就无法得到解决的承诺。我能够 console.log 证明 promise 数组确实有 x 个待处理的 promise。
const MongoClient = require('mongodb')
const axios = require('axios');
const url = 'https://catfact.ninja/fact'
let db = null;
let client = null;
//this one works great
const getMetaData = function () {
let data = axios.get(url+"s")
.then(response => {
return response.data
}).catch(error => console.log(error));
return data;
}
//this one will not resolve
const dataArray = async function (total) {
let baseUrl = url+"s/facts?page="
let res =[];
let promises = [];
for (let page = 1; page <= total; page++){
promises.push(axios.get(baseUrl+page))
}
axios.all(promises).then(result => console.log(result))
//originally i wanted to map the result to an array of json
//objects, but if i could even get a console.log it would be
//a win. spread operator not working, Promise.all not working
//i must have tried 12 different stackoverflow responses from
//other questions. until i can resolve the promises I can't do anything.
}
exports.connect = async function(url, done) {
if (db) return done();
// let data = await getMetaData()
// let total = data['total']
let arr = dataArray(5);
//console.log("arr is "+arr)
MongoClient.connect(url, {useNewUrlParser: true}, function (err, client){
if (err) return done(err);
client = client;
db = client.db('morefun');
/*
db.collection('catfacts').insertMany(dataArray, function(err, res){
if (err) throw err;
console.log("Inserted: " + res.insertedCount);
})*/
done();
});
}
exports.get = function() {
return db;
}
//make sure this is correct
exports.close = function(done) {
if (db) {
client.close(function(err, result) {
db = null;
mode = null;
done(err);
});
}
}
我需要一个 JSON 对象数组,以便 insertMany 函数工作。请有人帮助我。我究竟做错了什么?
【问题讨论】:
标签: javascript node.js mongodb express axios