2017-01-24 34 views
0

Ich versuche, mehrere Bilder zu Firebase hochladen, aber ich brauche die URL, die zurückgegeben wird, bevor ich fortfahren kann. Gibt es eine Möglichkeit, auf diese Rückkehr zu warten, bevor Sie fortfahren?Warten auf Firebase Bild hochladen

Der Code, den ich habe, ist:

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', 
    }); 
}); 

ich mehr als ein Bild-Upload haben wollen, so werde ich mehrere Anrufe müssen Firebase, bevor ich Parse nennen. Wie kann ich sicherstellen, dass die URLs von den Firebase-Anrufen zurückgegeben werden, bevor Sie fortfahren?

Jede Hilfe würde sehr geschätzt werden.

Antwort

1

glaube ich, was Sie suchen Promise.all() ist:

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

Promise.all(array) lösen erst, nachdem alle Versprechungen in array gelöst haben. Lassen Sie Ihr ForEach bei jeder Iteration ein Promise-Objekt erstellen (anstatt zu verwenden, um jede Auflösung individuell zu behandeln), und drücken Sie es auf ein Array. Führen Sie danach nach dem data.forEach()-Aufruf aus.

+0

Vielen Dank, Sie haben Recht. –