2017-01-28 25 views
1

私はExpressフレームワークと学習には新しく、.thenを使用している問題があります。問題は2つの関数があり、2番目の関数が実行される前に最初の関数を完了させたいということです。私はモジュールをエクスポートしています。Expressフレームワークで使用できません

var ubm = require('./userBasic'); 

2つの機能setUserDatashowUserIdがありますが、showUserIdはsetUserDataがその動作を行った後にのみ実行する必要があります。以下は

var userId = ubm.setUserData(userName,userEmail,userDOB,moment); 

userId.then(ubm.showUserId(userId)); 

2つの関数です:

module.exports = { 
        setUserData: function (userName,userEmail,userDOB,moment){ 
           //Performing database activities 
         return userId; 
        } 
        showUserId: function (userId){ 
         console.log(userId); 
        } 
    } 

私はそれがTypeError: Cannot read property 'then' of undefined言う実行すると。

私は非常に新しいと学習し、解決策を見つけることができませんでした。私はいくつかのGoogle検索を行い、promiseについての簡単な説明を得ましたが、ここで実装する方法はわかりません。

答えて

1

てみ使用して約束

module.exports = { 
    setUserData: function(userName, userEmail, userDOB, moment) { 
       return new Promise(function(resolve, reject) { 
        //db stuff 
        reject(error); 
        resolve(userId); 
       }); 
       }, 
    showUserId: function(userId) { 
        console.log(userId); 
       }; 
    }; 

だからあなたの実行中に、あなたが注意すべき物事のカップルは、この例では、あなただけの別の機能を必要とせずにデータを記録することができることである

ubm.setUserData(username, usereEmail, userDOB, moment) 
.then((data) => { 
    showUserId(data); 
}) 
.catch((err) => { 
    console.log(err); 
}); 

を記述しますlike

ubm.setUserData(username, usereEmail, userDOB, moment) 
.then((data) => { 
    console.log(data); 
}) 
.catch((err) => { 
    console.log(err); 
}); 

resolve()に渡す値はすべて返されますあなたがエラーをreject()に渡すときに。

+0

問題は、 'showUserId'が' setUserData'の前に実行され、 'undefined'を記録することです。 –

+0

私は 'reject'を削除しようとしたので、上記の問題が発生しました。' reject(error) 'を追加したところ、' error'は 'undefined 'です。何かエラーが出るのをやめないとどうなりますか? –

+0

ご迷惑をおかけいたしますが、ご迷惑をおかけして申し訳ございません。はい、そのビットを残して、それは動作し、キャッチ部分を除外します –

関連する問題