Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么我的目标是';s值是函数而不是字符串?_Javascript_Reactjs_String_Firebase_Object - Fatal编程技术网

Javascript 为什么我的目标是';s值是函数而不是字符串?

Javascript 为什么我的目标是';s值是函数而不是字符串?,javascript,reactjs,string,firebase,object,Javascript,Reactjs,String,Firebase,Object,我有一个事件的更新函数。用户可能添加了或未添加挑逗视频。如果他们有,我想上传它并用下载url保存该对象 我使用不同的功能上传视频,只有在用户附加视频时才调用它 但当我尝试更新时,它告诉我,我正在尝试编写一个无效的对象,因为trister中的数据是一个函数,我希望它是一个字符串(下载url,或者只是一个空字符串) 我做错了什么 这就是我调用函数的方式: updateEvent(values, videoAsFile, () => { setIsEventEdited(false);

我有一个事件的更新函数。用户可能添加了或未添加挑逗视频。如果他们有,我想上传它并用下载url保存该对象

我使用不同的功能上传视频,只有在用户附加视频时才调用它

但当我尝试更新时,它告诉我,我正在尝试编写一个无效的对象,因为
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是的。我刚刚做了,它只是打印整个函数,没有任何返回选项。我如何让它等待响应,而不是将整个函数作为它的值?