【问题标题】:Exporting a promise to use in another promise导出一个 Promise 以在另一个 Promise 中使用
【发布时间】:2020-01-10 05:27:29
【问题描述】:

我想最终将我的代码模块化,以分解我的一个路由文件中的一些功能。我能够做一个承诺链,允许我获取和使用 2 条数据。但是,我总共需要在原始承诺上运行 5 个功能。我将发布工作代码,然后发布我正在尝试做的事情,但我无法找到一种方法,因为我知道的异步没有按顺序调用或执行。 编辑:这是我通过 colt Steele 的 udemy 训练营学到的第一个真正的项目。他所做的是让他的代码工作,然后将其重构为自己的文件,然后将其导入他需要的地方。我也在做同样的事情,因为这是我迄今为止所知道的,所以我的索引中的所有函数都通过承诺链接工作。但是我想将它们移动到我的 Marvel.js 并在整个项目中使用它们。

getCharactersComic(character)
getCharacterEvents(character)
getCharacterCreators(character)
getCharacterSeris(character)
getCharacterStories(character)

这就是我的 index.js 中的内容

function getCharactersComic(character){
    var charactersComics;
    return axios.get('https://gateway.marvel.com:443/v1/public/characters/' + character[0].id + '/comics?limit=10', {
      params:{
        ts:  timeStamp,
        apikey: key.MarvelPubKey,
        hash:  marvelHash
      }
    })
    .then(response =>{
      charactersComics = response.data.data.results;
      return charactersComics;
    })
    .catch(err => {
      console.log('This is the error from comics: ', err.response);
    })


  }

router.get("/:id",  function(req,res){
  var character =  axios.get('https://gateway.marvel.com:443/v1/public/characters/' + req.params.id,{
    params:{
      ts:  timeStamp,
      apikey: key.MarvelPubKey,
      hash:  marvelHash
    }
  })
  .then( response =>{
    let character = response.data.data.results;
    let comics = getCharactersComic(character);
    comics.then(comics =>{
      comics = comics.find(Marvel.imageCheck);
      res.render('character', {character: character , comics:comics});
    })
  })
  .catch(error => console.log('This is the error from id: '));
});

我想在我的 Marvel 文件中获取我的所有函数,以便我可以像这样调用和使用它们,即使我必须同时使用所有函数。

Marvel.getCharactersComic(req.params.id).
Marvel.getCharactersComic(req.params.id)
Marvel.getCharacterEvents(req.params.id)
Marvel.getCharacterCreators(req.params.id)
Marvel.getCharacterSeris(req.params.id)
Marvel.getCharacterStories(req.params.id)

【问题讨论】:

  • getCharactersComic 返回一个承诺 .... 使用 .then
  • 我在路由器中做了,但我必须做 5 {.then} 才能获得我需要的所有数据
  • 为什么这是个问题?也许更清楚地表明你想做什么
  • 听起来你想在五个承诺上调用Promise.all,并且只使用一个then
  • @JaromandaX 我已经编辑了我的帖子,我知道它现在很啰嗦,但我希望能详细描述我想要做的事情。

标签: javascript node.js axios es6-promise module.exports


【解决方案1】:

您可以链接多个.then()

你也可以看看async/await
它在 MDN 上有很好的记录:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2023-03-31
    • 2017-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-17
    • 2018-02-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多