【问题标题】:How to return a string from fetch-node function [duplicate]如何从 fetch-node 函数返回字符串 [重复]
【发布时间】:2018-12-18 19:38:12
【问题描述】:

我正在使用电影数据库 API 并尝试在 youtube 上播放预告片,因为我需要来自 JSON 响应的键值。我尝试了所有方法,但该函数要么返回承诺,要么返回未定义。我尝试使用回调来返回结果,但这也不起作用。

const fetch = require('node-fetch');
// function declaration 
async function trailer(id, callback) {
  var video = 'https://api.themoviedb.org/3/movie/' + id + '/videos?api_key=' + apiKey +'&language=en-US';
  var key = await fetch(video)
    .then(res => res.json())
    .then(json => callback(json.results[0].key));
}

// function call returns a promise (expected key string ex."Zftx5a")
trailer(id, function(result){return result;})

【问题讨论】:

  • 好吧,key 将是未定义的 - 这是肯定的...... key 到底是什么?

标签: javascript json themoviedb-api


【解决方案1】:

由于fetch 函数进行异步调用,您的trailer 函数在promise 链解析之前返回key。解决该问题的最简单方法是使用 async 函数,因此您的代码将类似于:

async function trailer(id) {
  var video = 'https://api.themoviedb.org/3/movie/' + id + '/videos?api_key=' + apiKey +'&language=en-US';
  return await fetch(video)
    .then(res => res.json())
    .then(json => json.results[0].key);  
}

但是,您必须考虑到async 函数将返回一个承诺,因此您必须修改您的代码。

欲了解更多信息,请查看以下链接:

https://www.npmjs.com/package/node-fetch#common-usage

https://developers.google.com/web/fundamentals/primers/promises

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function

【讨论】:

  • 如果这也将返回一个承诺,它会有什么不同?好吧,我尝试修改我的代码以从返回的承诺中获取一个字符串,但似乎没有任何效果。
猜你喜欢
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-02
  • 2022-10-14
  • 2016-02-15
  • 1970-01-01
  • 2016-07-13
相关资源
最近更新 更多