Мне интересно, можно ли использовать await и .then в одной и той же асинхронной функции?Вот моя функция:
uploadImageToImgur: async function (file) {
return new Promise(function(resolve, reject) {
const url = 'https://api.imgur.com/3/image',
reader = new FileReader();
if (file) {
reader.readAsDataURL(file);
}
reader.onloadend = async function () {
let { result } = reader;
try {
const request = await fetch(url, {
method: 'POST',
headers: {
"Authorization": 'my auth',
},
body: result.replace(/^data:image\/(png|jpg|jpeg|gif);base64,/, "")
})
.then((response) => {
response.json()
.then(data => {
resolve(data.data.link)
})
});
} catch (e) {
reject(e);
}
}
});
},
Затем я вызываю эту функцию в другой, где я сохраняю объект в indexedDb со ссылкой, полученной из imgur API.
this.uploadImageToImgur(image)
.then((image) => {
let db = this.dbOpen.result,
tx = db.transaction('EventsStore', 'readwrite'),
store = tx.objectStore('EventsStore');
event = store.put({ title, location, description, summary, date, time, image });
//rest of the code
});
Почему я выбрал этот подход?Потому что, когда я использовал только ключевое слово await (без конструктора обещаний), данные добавлялись в БД до того, как было разрешено обещание; / То, что я не хотел (возможно, я где-то допустил ошибку .. idk).
Мой вопрос заключается в том, является ли приведенный выше код правильным способом сделать это (он работает как задумано), или мне следует его реорганизовать?Если так, пожалуйста, скажите мне, как.Этот вопрос для меня скорее информативен, чем связан с конкретной проблемой.Спасибо.