使用しているomdbapiから応答を受け取る前に、コードを停止してリダイレクトする方法を実装しようとしています。
映画を検索し、セッション内のすべてのタイトルを保存するための私の関数は、次のようになります。
app.post('/search', isLoggedIn, function(req, res) {
function getMovies(arg, callback){
console.log('In getMovies');
console.log('searching for '+arg);
omdb.search(arg, function(err, movies) {
if(err) {
return console.error(err);
}
if(movies.length < 1) {
return console.log('No movies were found!');
}
var titles = [];
movies.forEach(function(movie) {
// If title exists in array, dont push.
if(titles.indexOf(movie.title) > -1){
console.log('skipped duplicate title of '+movie.title);
}
else{
titles.push(movie.title);
console.log('pushed '+movie.title);
}
});
// Saves the titles in a session
req.session.titles = titles;
console.log(req.session.titles);
});
// Done with the API request
callback();
}
var title = req.body.title;
getMovies(title, function() {
console.log('Done with API request, redirecting to GET SEARCH');
res.redirect('/search');
});
});
ただし、コールバックを正しい方法で実装するかどうかはわかりません。コールバックの前に実際に実行されているが、前に終了していないapiリクエストに問題がある可能性があるためです。そのため、コールバックは機能しています。
だから私はこの質問から2つのことをしたいだけです。コールバックは機能しますか?そして、コールバックがこの問題を解決しない場合はどうすればよいですか?
正しい方向へのすべての答えに感謝します。
追加
callback();
に、このように
omdb.search(arg, function(err, movies) {
if (err) {
return console.error(err);
}
if (movies.length < 1) {
return console.log('No movies were found!');
}
var titles = [];
movies.forEach(function(movie) {
// If title exists in array, dont push.
if (titles.indexOf(movie.title) > -1) {
console.log('skipped duplicate title of ' + movie.title);
} else {
titles.push(movie.title);
console.log('pushed ' + movie.title);
}
});
// Saves the titles in a session
req.session.titles = titles;
callback();
});
omdb.searchは非同期関数であるため、omdb.searchの前にコールバックが実行されます
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加