Javascript 为什么我的目标是';s值是函数而不是字符串?
我有一个事件的更新函数。用户可能添加了或未添加挑逗视频。如果他们有,我想上传它并用下载url保存该对象 我使用不同的功能上传视频,只有在用户附加视频时才调用它 但当我尝试更新时,它告诉我,我正在尝试编写一个无效的对象,因为Javascript 为什么我的目标是';s值是函数而不是字符串?,javascript,reactjs,string,firebase,object,Javascript,Reactjs,String,Firebase,Object,我有一个事件的更新函数。用户可能添加了或未添加挑逗视频。如果他们有,我想上传它并用下载url保存该对象 我使用不同的功能上传视频,只有在用户附加视频时才调用它 但当我尝试更新时,它告诉我,我正在尝试编写一个无效的对象,因为trister中的数据是一个函数,我希望它是一个字符串(下载url,或者只是一个空字符串) 我做错了什么 这就是我调用函数的方式: updateEvent(values, videoAsFile, () => { setIsEventEdited(false);
trister
中的数据是一个函数,我希望它是一个字符串(下载url,或者只是一个空字符串)
我做错了什么
这就是我调用函数的方式:
updateEvent(values, videoAsFile, () => {
setIsEventEdited(false);
setCurrentEvent(values);
})
// vv−−−−−−−−−−−−−−− Start of the uploadTeaserVideo function body
const uploadTeaserVideo = (event, video) => async () => {
// ^^−−− Start of the body of the function it returns
const ref = storage.ref(`/videos/events/${event.id}/`);
const upload = await ref.put(video);
if (!upload) return "";
const downloadUrl = await ref.getDownloadURL();
if (!downloadUrl) return "";
return downloadUrl;
};
然后是这些功能:
const uploadTeaserVideo = (event, video) => async () => {
const ref = storage.ref(`/videos/events/${event.id}/`);
const upload = await ref.put(video);
if (!upload) return "";
const downloadUrl = await ref.getDownloadURL();
if (!downloadUrl) return "";
return downloadUrl;
};
export const updateEvent = (values, teaserVideo, cb) => async () => {
if (teaserVideo) {
const teaser = await uploadTeaserVideo(values, teaserVideo);
db.collection("events")
.doc(values.id)
.set({ ...values, teaser })
.then(() => {
cb();
});
} else {
db.collection("events")
.doc(values.id)
.set(values)
.then(() => {
cb();
});
}
};
我已经检查过,并且
teaserVideo
是有效的视频文件,如果未选择视频,则为null。uploadTeaserVideo
定义为返回函数的函数:
updateEvent(values, videoAsFile, () => {
setIsEventEdited(false);
setCurrentEvent(values);
})
// vv−−−−−−−−−−−−−−− Start of the uploadTeaserVideo function body
const uploadTeaserVideo = (event, video) => async () => {
// ^^−−− Start of the body of the function it returns
const ref = storage.ref(`/videos/events/${event.id}/`);
const upload = await ref.put(video);
if (!upload) return "";
const downloadUrl = await ref.getDownloadURL();
if (!downloadUrl) return "";
return downloadUrl;
};
我怀疑您的意思是它是一个异步
函数,返回(承诺)下载URL
:
const uploadTeaserVideo = async (event, video) => {
您是否记录了
striser
的值以查看它得到的是什么对象?这将是一种快速的方法,可以将调试搜索指向正确的方向。因为您告诉uploadstriservideo()
返回:constuploadstriservideo=(事件,视频)=>async()=>{…}
。它返回一个async
函数,如果executed@BrianThompson是的。我刚刚做了,它只是打印整个函数,没有任何返回选项。我如何让它等待响应,而不是将整个函数作为它的值?