如何正确使用承诺 return 2 个不同的结果
how to correctly use promises to return 2 different results
我正在尝试在 JavaScript 中使用 Promises,使用 ES6 来 return 来自一个对象的 2 个方法的数据,这将在生产中调用端点。
我的 MovieApi
对象我有 2 个承诺,我想 return 首先是电影列表,然后是 1 部电影的 ID。我想使用承诺来避免回调地狱。我正在按照问题 Arent promises just callbacks 的答案列出的方法,但我显然做错了,因为我有错误 findMovie is not defined
let movieData = [
{
id: '1011',
name: 'Gleaming the cube',
year: "1989"
},
{
id: "1012",
name: "Airborne",
year: "1989"
}
]
let MovieApi = {
findMovie: function(id) {
return new Promise(function(resolve, reject) {
if(id === undefined) reject(Error('incorrect movie id'));
let movie = ''
for (let m of movieData) {
if (m.id.toLowerCase() === id.toLowerCase()) {
movie = m
break
}
}
resolve(movie)
});
},
findAllMovies: function() {
return new Promise(function(resolve, reject) {
if(movieData === undefined) reject(Error('Could not find any movies'))
resolve(movieData)
});
}
}
像这样调用电影承诺...但是我在尝试调用第二个 .then()
方法时遇到错误
MovieApi.findAllMovies()
.then( function (movies){
return findMovie(req.params.id)
}).then(function(movie){
let MovieStore = { movie: movie, movies: movies }
}).catch(function(error) {
console.error("Failed!", error);
});
有没有办法摆脱这里的回调地狱,或者我是否只需要再次调用 MovieApi 对象,本质上具有与使用回调相同的可读性问题。
问题是return findMovie(req.params.id)
,你的findMovie
是MovieApi
对象的属性所以
MovieApi.findAllMovies()
.then( function (movies){
return MovieApi.findMovie(req.params.id)
})
演示:Fiddle
我正在尝试在 JavaScript 中使用 Promises,使用 ES6 来 return 来自一个对象的 2 个方法的数据,这将在生产中调用端点。
我的 MovieApi
对象我有 2 个承诺,我想 return 首先是电影列表,然后是 1 部电影的 ID。我想使用承诺来避免回调地狱。我正在按照问题 Arent promises just callbacks 的答案列出的方法,但我显然做错了,因为我有错误 findMovie is not defined
let movieData = [
{
id: '1011',
name: 'Gleaming the cube',
year: "1989"
},
{
id: "1012",
name: "Airborne",
year: "1989"
}
]
let MovieApi = {
findMovie: function(id) {
return new Promise(function(resolve, reject) {
if(id === undefined) reject(Error('incorrect movie id'));
let movie = ''
for (let m of movieData) {
if (m.id.toLowerCase() === id.toLowerCase()) {
movie = m
break
}
}
resolve(movie)
});
},
findAllMovies: function() {
return new Promise(function(resolve, reject) {
if(movieData === undefined) reject(Error('Could not find any movies'))
resolve(movieData)
});
}
}
像这样调用电影承诺...但是我在尝试调用第二个 .then()
方法时遇到错误
MovieApi.findAllMovies()
.then( function (movies){
return findMovie(req.params.id)
}).then(function(movie){
let MovieStore = { movie: movie, movies: movies }
}).catch(function(error) {
console.error("Failed!", error);
});
有没有办法摆脱这里的回调地狱,或者我是否只需要再次调用 MovieApi 对象,本质上具有与使用回调相同的可读性问题。
问题是return findMovie(req.params.id)
,你的findMovie
是MovieApi
对象的属性所以
MovieApi.findAllMovies()
.then( function (movies){
return MovieApi.findMovie(req.params.id)
})
演示:Fiddle