Вы захотите преобразовать restoreImageDataForLayers
в функцию, которая возвращает обещание, обещание которого разрешается только после завершения операций в функции.
restoreImageDataForLayers() {
const layerPromises = this.layers.map(item => {
return new Promise((resolve, reject) => {
// All your canvas-image code here...
image.onload = function(){
// Your onload code here
// Then resolve the promise for this item
resolve()
}
})
})
return Promise.all(layerPromises)
}
Для этого вам нужно обернуть процедуру загрузки изображения в обещание. Используйте array.map()
, чтобы создать массив этих обещаний, по одному для каждого элемента. Затем используйте Promise.all()
, чтобы создать одно обещание, которое разрешается только тогда, когда все обещания в массиве разрешаются.
Чтобы вызвать эту функцию, вы просто делаете это:
frame.restoreImageDataForLayers().then(() => {
frame.changeResultLayer();
});
Или, если вызывающий абонент находится в функции async
, сделайте следующее:
async thatWrapperFunction(){
await frame.restoreImageDataForLayers();
frame.changeResultLayer();
}