首页 > 解决方案 > 在 Javascript/NodeJs 中调用方法两次时 JSON 返回空

问题描述

我有这个方法使用 Loopback(Node.Js 框架)来返回一个由 MP3 和视频组成的 JSON。

这是我到目前为止的代码

  let names = await app.models.cm_comediens.getValue();
    let sonMp3 = await app.models.cm_comediens.getMp3ById(id);

    const mp3 = sonMp3.map(id  =>  {
      let mappedObj = {}
      Object.keys(id).forEach( async (key)=> {
        let medias = await app.models.cm_comediens_medias.find({ where: {idMedia: id[key].idMedia}} )
        mappedObj[key] = {
          "Titre": medias.map(person =>  person.intitule ).toString(),
          "Filename": medias.map(person =>   person.filename ).toString(),
          "Langue": names.find(y => y.idValue === id[key].qfLangue).fr,
          "Type": names.find(y => y.idValue === id[key].qfType).fr,
          "Description": id[key].description,
          "Intention1": names.find(y => y.idValue === id[key].qfInterpretation1).fr,
          "Intention2": names.find(y => y.idValue === id[key].qfInterpretation2).fr,
          "Intention3": names.find(y => y.idValue === id[key].qfInterpretation3).fr,
        }
      });
      return mappedObj;
    });

    let video = await app.models.cm_comediens.getVideoById(id);

    const videoss = video.map(id => {
      let mappedObj = {}
      Object.keys(id).forEach( async (key)=> {
         let medias = await app.models.cm_comediens_medias.find({ where: {idMedia: id[key].idMedia}} )
        mappedObj[key] = {
          "Titre": medias.map(person =>  person.intitule ).toString(),
          "Filename": medias.map(person =>   person.filename ).toString(),
          "Langue": names.find(y => y.idValue === id[key].qfLangue).fr,
          "Type": names.find(y => y.idValue === id[key].qfType).fr,
          "Description": id[key].description,
          "Intention1": names.find(y => y.idValue === id[key].qfInterpretation1).fr,
          "Intention2": names.find(y => y.idValue === id[key].qfInterpretation2).fr,
          "Intention3": names.find(y => y.idValue === id[key].qfInterpretation3).fr,
        }
      });
      return mappedObj;
    });

    result.mp3=mp3;
    result.video=videoss;

   var resultfinal = [result]
   return resultfinal;

问题是当我运行它时它返回:

在此处输入图像描述 在此处输入图像描述

当我删除 let medias = await app.models.cm_comediens_medias.find({ where: {idMedia: id[key].idMedia}} )视频中的“Titre”和“FileName”元素时,一切正常,并且视频的结果也正确显示。此外,当我执行 console.log(medias) 时,结果如下所示:

[ { idMedia: 42085,
    idComedien: 1426,
    intitule: 'Tale of us Distante',
    typeMedia: 'video',
    filename: 'http://localhost:3000/Who Loves The Sun (Original Mix).mp4',
    originalFilename: 'Who Loves The Sun (Original Mix).mp4',
    triComedien: 0,
    timestampCreation: 2019-06-13T10:56:03.000Z,
    timestampModification: 2019-06-13T10:56:03.000Z } ]
(node:13280) [DEP0079] DeprecationWarning: Custom inspection function on Objects via .inspect() is deprecated
[ { idMedia: 42087,
    idComedien: 1426,
    intitule: 'cxwccw',
    typeMedia: 'video',
    filename: 'http://localhost:3000/Who Loves The Sun (Original Mix).mp4',
    originalFilename: 'Who Loves The Sun (Original Mix).mp4',
    triComedien: 0,
    timestampCreation: 2019-06-13T11:15:11.000Z,
    timestampModification: 2019-06-13T11:15:11.000Z } ]

所以我不知道到底出了什么问题。是因为我两次调用同一个函数吗?任何帮助,将不胜感激。谢谢

标签: javascriptnode.jsjsonasync-awaitloopbackjs

解决方案


推荐阅读