コールバックを実装しようとしています。または、getリクエストが完了するまで待つ方法です。これはnode.jsエクスプレスにあります

サイモン・グルドストランド

使用している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つのことをしたいだけです。コールバックは機能しますか?そして、コールバックがこの問題を解決しない場合はどうすればよいですか?

正しい方向へのすべての答えに感謝します。

OleksandrT。

追加

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]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ