Я изо всех сил пытаюсь успокоить Обещания. Я думаю, что понимаю концепцию, но я не могу заставить их работать на бэкэнде.
Я прочитал несколько сообщений stackoverflow. Я до сих пор вижу несколько, которым всего несколько месяцев, так что, думаю, я не единственный:)
В частности, мне нужна помощь о том, как я могу передать результат выполненного обещания в моем коде. В приведенном ниже коде я извлекаю файл JSON из API-интерфейса starwars и хочу записать его в коллекцию атласа mongodb.
Я использую ax ios .get, который возвращает обещание. Затем я разрешаю его, используя .then, а затем использую insertOne для коллекций mongoDB.
На внешнем интерфейсе, например, в React, он работает как положено, где вы используете setState для изменения состояния с помощью setState внутри .then функция. Я не понимаю, почему это не работает в бэкэнде.
Не могли бы вы сказать мне, что мне нужно изменить, чтобы я мог заставить его писать в атласе mongoDB?
var axios = require("axios");
const MongoClient = require("mongodb").MongoClient;
var db;
const getData = () => {
return axios
.get("https://swapi.co/api/people/1")
.then(response => {
if (!response.data) throw Error("No data found.");
console.log(JSON.stringify(response.data)) **//This returns the data as expected.**
return JSON.stringify(response.data);
})
.catch(error => {
console.log(error);
throw error;
});
};
console.log(getData()); **// This returns {Promise <pending>}**
const client = new MongoClient(process.env.MONGODB_URL, {
useNewUrlParser: true,
useUnifiedTopology: true
});
// Connect to database and insert default users into users collection
client.connect(err => {
console.log("Connected successfully to database");
let d = {
name: "Luke Skywalker",
height: "172",
mass: "77",
hair_color: "blond",
skin_color: "fair",
eye_color: "blue"
};
db = client.db(process.env.DB_NAME);
db.collection("macroData").insertOne(d); //this works
db.collection("macroData").insertOne(getData); // this doesn't work as it still appears to be a promise
});