Я работаю над своим проектом Firebase, и он работал до вчерашнего дня - прошел месяц или около того. Я не знал, почему он тайно перестал работать.
В двух словах, моя функция под названием uploadProfilePi c ниже используется для вернуть обещание из Firebase Storage.
// upload [profilePic] to [destPath]
export const uploadProfilePic = (destPath, profilePic, isCropped) => dispatch => {
dispatch(requestUploadPicToStorage(destPath));
let ref = storageRef.child(destPath);
// create file metadata including the content type
var metadata = {
contentType: profilePic.fileType,
};
// upload the data_url string to Firebase's Storage
if (isCropped)
return ref.putString(profilePic.cropURL, 'data_url', metadata); // promise returned
else
return ref.putString(profilePic.oriURL, 'data_url', metadata); // promise returned
}
Я добавил Promise.all () , чтобы проверить, не выполнено ли какое-либо из обещаний. Он работал в прошлом месяце и перестал работать вчера. У меня нет ни малейшего представления о том, почему он внезапно перестал работать.
export const uploadOriAndCrop = (username, profilePic, isOriPicUpdated) => dispatch => {
let croppedPath = "/users/" + username + "_cropped_profile_pic" + profilePic.fileType;
let oriPath = "/users/" + username + "_profile_pic" + profilePic.fileType;
const promises = [];
// upload cropped pic to firebase storage
const promise1 = dispatch(uploadProfilePic(croppedPath, profilePic, true));
promises.push(promise1); // promise1 is undefined
// if we need to update the original picture
if (isOriPicUpdated) {
// upload original pic to firebase storage
const promise2 = dispatch(uploadProfilePic(oriPath, profilePic, false));
promises.push(promise2); // promise2 is undefined
}
// [promise1, promise2] is "undefined"
return Promise.all(promises);
}
Меня поразило то, что все работает идеально, если я назову это так:
...
ref.putString(profilePic.cropURL, 'data_url', metadata)
.then((snapshot) => {
console.log(snapshot);
})
...
Я мог бы легко уйти, повторив третий фрагмент кода пару раз. Однако я хочу, чтобы мои коды были чистыми и короткими.
Может кто-нибудь сказать мне, какова возможная причина «неопределенных» значений, возвращаемых uploadProfilePi c, когда он вызывается в uploadOriAndCrop ?
Спасибо!
Дополнительная информация
ref.putString(profilePic.cropURL, 'data_url', metadata);
возвращает значение и не является неопределенным.
// upload the data_url string to Firebase's Storage
if (isCropped)
{
const val = ref.putString(profilePic.cropURL, 'data_url', metadata);
console.log(val);
return val; // val is not undefined
}
else
{
const val = ref.putString(profilePic.oriURL, 'data_url', metadata);
console.log(val); // val is not undefined
return val;
}