У меня проблемы с выполнением обещаний внутри цепочки.В JSBin ниже вы можете увидеть код, который у меня есть (NodeJS и mongo).Как я могу вернуть данные с 2 уровней вниз по цепочке?Вот код и JSBIN
function test(url) {
return new Promise((resolve, reject) => {
return scrapeIt({
url: url,
headers: { 'User-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36' }
}, {
urls: {
listItem: '#list',
data: {
url: {
selector: "span[data-label='url']"
}
}
},
currentPage: {
selector: 'span.current',
convert: x => parseInt(x)
},
pages: {
selector: 'span.pages',
convert: x => parseInt(x)
}
}).then(({ data, response }) => {
return MongoClient.connect(config.db.serverUrl, function (err, db) {
var dbo = db.db(config.db.name)
var urlsToInsert = data.urls
return dbo.collection(config.db.collection).find({ 'url': { '$in': data.urls } }, { projection: { _id: 0 } }).toArray(function (err, res) {
if (res && res.length > 0) {
// Exclude properties already in DB
urlsToInsert = urlsToInsert.filter(x => !res.some(y => x.url == y.url))
if (urlsToInsert && urlsToInsert.length > 0)
return dbo.collection(config.db.collection).insertMany(urlsToInsert, function (err, res) {
console.log("Number of documents inserted: " + res.insertedCount)
db.close()
return urlsToInsert
})
}
})
})
})
})
}
test('https://www.google.com').then(({ data, response }) => {
console.log(data)
}).catch((error) => {
console.log(error)
})
Фрагмент JSBin
Обновление 1
Мой фактический код намного длиннее, поэтому я вынул многокод, который не был необходим для решения проблемы.Я исправил проблему с нулем urlsToInsert.Также возвращаемся теперь urlsToInsert.