2017-06-21 8 views
0

私はいつも結果がnullの場合にキャッチするのにif (!result)を使用しますが、何らかの理由でここでは動作しません。mongodbの結果はnullですが、((result))がキャッチしていない場合

exports.getDiscount = function(req, callback) { 

    var discountModel = require('../models/discountModel'); 
    var discountTable = mongoose.model('discountModel'); 
    discountTable.findOne (
     { _id: req.body.discount } 
    ,function (err, data) { 
     if (err) {callback({ error:true, err:new Error('findDiscount: ' + err) })}; 

     console.log("data " + data) 
     console.log("json: " + JSON.stringify(data, null, 4)); 
     if (!data) { 
      callback({ error:true, err:"NOT FOUND: " + req.body.discount + " was not found" }) 
     } 
     console.log("WHY ARE YOU NOT STOPPING?!?!") 
     console.log("data " + data) 
     console.log("json: " + JSON.stringify(data, null, 4)); 

     if (Math.round(new Date().getTime()/1000) > data.expires) { 
      callback({ error:true, err:"EXPIRED: " + new Date(data.expires*1000).toDateString() + " " }) 
     } 
     callback({ error:false, percent:data.percent }); 
    }); 
} 

そして、これがif (!data) {でコールバックがこのNULL値をキャッチされていませんどのように来る私のコンソール出力

enter image description here

のですか?

+1

um、return *? –

+0

@Jonasw yah、私はコールバックがリターンと同じであると思った、私はそう思わない:-) – torbenrudgaard

+0

BTW。あなたが間違って受け入れた答え。コールバック引数は 'callback(err、response)'(一般的な言い回しでは2つの引数を意味する)です。問題は、あなたが 'single '引数を渡しているだけで、' err'部分として解釈されます。あなたの最後の呼び出しは 'callback(null、percent:data.percent);'でなければなりません。 'err'は' null'とみなされ、 'response'は返された実際のデータです。 –

答えて

1

if (!data) { ... }の実行後に実行中にコードが停止しています。 (または、そのことについては、if (err) { ... }など)

あなたがちょうどあなたがその ifブロック内 console.log()を投げた場合、それはそのコードを表示する必要があります callback()機能

を呼び出した後return false;か何かにしたいほとんどの

ブロックに入っています。

+0

ああ、あなたはジャスティンでした! - 私はコールバックが十分だと思ったが、各コールバックの後にリターンを入れた後、すべてが機能した。 – torbenrudgaard

+0

恐ろしく!それは喜んで:) –

関連する問題