2017-12-18 108 views
0

我有一個node.js程序,它每5秒向服務器發送一個POST請求,並獲取我想要的數據的值並跟蹤它。例如,如果它高於某個數字發送日誌消息,並且它的值甚至更高調用另一個函數(最終我想設置5個或更多的閾值)。我的問題是如果我想跟蹤多個閾值,我該怎麼辦?如何從異步數據檢查多個不等式?

現在我有它的方式是有setInterval函數每5秒調用我的getValue(限制),其中限制是我想要的限制,如果限制被繞過另一個函數被調用,我不想打電話getValue多次,因爲它是多餘的。

const request = require('request'); 

function getValue(limit){ 
    var JSONobject = {'ContractCode': contractCode}; 
    request({ 
     url: getUrl, 
     method: "POST", 
     json: true, 
     headers: { 
     'content-type': 'application/json; charset = UTF-8' 
     }, 
     body: JSONobject 
    }, function (error, response, body) { 
     var obj = JSON.parse(JSON.stringify(response)); 
     if(obj.body.d.LastTradedPrice > limit){ 
     console.log('passed the point : %d', obj.body.d.LastTradedPrice); 
     } 

    }); 
} 

謝謝

回答

0

我不能確定有關的問題。我可以說你想在某個頻率上調用一個函數。從其他服務器收集數據。另一個函數會調用它來獲取最新的數據。 對於這種問題,你可以考慮使用rxjs。

這裏是簡單的rxjs例子。

// Source.js

const Rx = require('rxjs'); 
const dataStream = new Rx.BehaviorSubject(); 
export.getLatestData =() => { 
    return dataStream.asObservable(); 
}; 
const getData = (cb) => { 
    setTimeout(() => { 
    cb(Math.random()); 
    }, Math.random() * 10000) 
}; 
setInterval(() => { 
    getData((data) => { 
    dataStream.next(data); 
    }) 
}); 

//這裏getLatestData將返回最新值

// Subscriber.js //在某些事件或致電

const src = require('source'); 
route.get('/getData',() => { 
    src.getLatestData().subscribe((latestData) => { 
    console.log(`latestData:${latestData}`); 
    }) 
}); 
+0

這是否它爲每個添加POST請求的訂戶再次發送?因爲我不想用請求氾濫服務器。 – AMiR

+0

您可以使用「toPromise」而不是訂閱 – xdeepakv