2017-01-24 5 views
0

Я пытаюсь загрузить несколько изображений в firebase, но мне нужен URL-адрес, который возвращается, прежде чем я смогу продолжить. Есть ли способ дождаться этого возвращения, прежде чем продолжить?Как дождаться загрузки изображения в firebase

Код, который у меня есть:

data.forEach((element) => { 
    const sessionId = new Date().getTime(); 
    Blob.build(RNFetchBlob.wrap(element.path), { type : 'image/jpeg' }) 
    .then((blob) => {firebase.storage() 
    .ref('images') 
    .child(`${sessionId}`) 
    .put(blob, { contentType : 'image/png' }) 
    .then((snapshot) => { 
     element.image = snapshot.metadata.downloadURLs[0]; 
    }) 
    }); 
}); 

Parse.Cloud.run('doSomething', { 
    data : data, 
}).then(res => { 
    dispatch({ 
    type: 'WE_DID_SOMETHING', 
    }); 
}); 

Я хочу, чтобы иметь больше чем одну загрузку изображения, так что я буду иметь несколько вызовов firebase, прежде чем я называю Разбор. Как я могу убедиться, что у меня есть URL-адреса назад от вызовов firebase, прежде чем продолжить?

Любая помощь была бы принята с благодарностью.

ответ

1

Я считаю, что вы ищете, Promise.all():

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all

Promise.all(array) будет решать только после того, как все обещания в array были решены. Пусть ваш forEach создает объект обещания на каждой итерации (вместо того, чтобы использовать .then() для обработки каждого разрешения отдельно) и нажмите его в массив, а затем запустите Promise.all(array) после вызова data.forEach().

+0

Благодарим вас, вы правы. –

Смежные вопросы