2017-07-29 50 views
0

我有一個request.post調用和另一個函數。我需要將restcall的響應作爲參數傳遞給函數。如何從restcall節點獲得響應後才能調用函數js

Iam在這裏面臨的當前問題是,即使在我從其餘調用得到響應之前函數也會被調用,並且null值正在通過。我知道我們需要爲此問題使用一些callabcks。但是我不知道該怎麼做可以找人幫忙。

app.post('/verifycreds',function(req,res) { 
    var reqdata = req.body; 
    var data = {}; 
    data.custid = reqdata.custid; 
    request.post({ 
    url:'https://database.mybluemix.net/verifycredentials', 
    headers:{ 
     'Content-Type':'application/json' 
    }, 
    body:data, 
    json:true 
}, function(err,response) { 
    verifycreds(response.body); 
}); 

function verifycreds(data) { 
    if((datareq.customerid === data.customerid) && (datareq.password == data.password)){ 
    res.send("valid"); 
    } else { 
    res.send("invalid"); 
    } 
} 

那麼我怎麼才能調用verifycreds函數只有當我從請求.post調用響應..任何幫助!

+0

什麼'request'應該有三個參數來定義? 'request.post'的簽名是什麼? –

+0

這種情況發生在我身上,當你看到你的代碼是絕對正確的,但輸出不像期望那麼我的問題是「你怎麼知道回調函數在之前運行」? – thelonglqd

+0

@thelonglqd我在我的verifycreds中保留了一個控制檯,我可以看到數據爲空 – user7350714

回答

3

你的回調是有效的,回調參數的問題。

  • 錯誤
  • 響應

所以正確的代碼是:

request.post({ 
url: 'https://database.mybluemix.net/verifycredentials', 
headers: { 
    'Content-Type': 'application/json' 
}, 
body: data, 
json: true 
}, function(err, res, body) { 
    // TODO: process possible errors 
    // if (err) { ... 
    verifycreds(body); 
}); 
+0

爲什麼會導致報告的症狀? *「Iam在這裏面臨的當前問題是,即使在我從其餘呼叫得到響應之前,函數也會被調用......」* –

+0

作者提到,該回調函數使用'null'調用,這是因爲它不在響應中,但在自己的參數, – alexmac

+0

@TJCrowder我的直覺是這不是真的,但假定,因爲回調收到null。 –