我已经编写了一个函数,该函数将通过 API 获取 IMDB ID 的 IMDB 评级。这是我传递 IMDB ID 的函数
async function movieDetails(ID){
let ratings= await getDetails(ID);
return ratings;
}
这是返回 IMDB 评级的函数。
const getDetails = val =>{
return Rx.Observable.fromPromise(fetch(`http://www.omdbapi.com/?i=${val}&plot=full&apikey=${APIKey}`)
.then(e => e.json())
.catch(err => console.log(err)))
.map(e => e.imdbRating)
.subscribe(x => {
console.log(x);
return x;
}, e => console.error(e));
}
但是这个函数返回一个承诺对象而不是 IMDB 评级。这是我在控制台上得到的输出。
Promise {[[PromiseStatus]]:"pending",[[PromiseValue]]:undefined}
Promise {[[PromiseStatus]]:"pending",[[PromiseValue]]:undefined}
Contract
7.3
8.1 和 7.3 是来自 getDeatils () 中的控制句的值,这是我正在返回的。并且在 movieDetails () 被调用时打印 promise 对象。可以 anyobody 指出我,我在这里做错了什么?
getDetails
函数返回subscription
,在movieDetails
中,您是await
正在订阅。简而言之,它不起作用。
当您订阅创建的 observable 时,您将获得订阅以控制其生命周期。这些订阅不会对 observables 的值执行任何操作。
const obs = Observable.from(...) //obs is Observable
const subs = obs.subscribe((x) => console.log(x)); //subs is Subscription
// subs.unsubscribe(); //when you want to unsubscribe even source does not completes
其次,您不能直接await
Observables-await 关键字用于 Promise。在 Observables 中,observer 是访问值的方式(subscribe
中提供的功能)。
本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处
评论列表(87条)