0
我一直想知道用node.js這樣的語言來做這件事的最好方法是什麼。節點是異步的,但如果在繼續使用該程序之前需要調用5次調用,該怎麼辦?我正在做一些事情來啓動我的dzen和node.js,並且必須獲得輸出大小。以下是我的目標:node.js中的許多異步調用?
var geo = require('child_process').exec("i3-msg -t get_outputs",
function(error, stdout, stderr) {
var out = JSON.parse(stdout);
doStuff(out[0].rect);
});
function doStuff(geom) {
// set up dzen
}
out [0] .rect是一個包含x,y,寬度和高度的對象。
我以後需要這些值,這是我必須做的唯一的調用,所以我不必擔心它。但是如果我不得不打更多電話呢?如果我需要進行大量的調用,並且仍然必須使用node.js,該怎麼辦?我不喜歡像
var call1 = do.stuff('thing', function(data){
call2(data);
});
function call2(d1){
do.more.stuff('yeah', function(data){
call3(d1, data);
});
}
function call3(d1,d2){
...
function finallyDone(d1,d2,d3,d4,d5,d6){
// actually use the data now with 6 params
這是做正確的方式,或者是有沒有更好的辦法的想法?我想我可以做這樣的事情:
var d1, d2, d3, d4, d5;
var call1 = do.thing(stuff, function(data){
setd1(data);
});
function setd1(data){
d1 = data;
getd2();
}
...
function setd5(data){
d5 = data;
getd6();
}
function getd6(){
var sh = call.thing(stuff, function(data){
doProgram(data);
});
}
function doProgram(d6){
console.log(d1 + d2 + d3 + d4 + d5 + d6);
}
會這樣嗎?全局變量通常是不好的?
tehlulz的建議異步(或類似的東西;在「流程控制庫」下搜索)是一個不錯的選擇。但請注意,在node.js中,聲明爲外部函數的變量實際上是模塊範圍的,而不是全局的;如果你把所有東西寫在一個大模塊中,顯然你會失去這種優勢,但是如果你正確地模塊化,你不應該遇到麻煩(你需要的每個模塊在概念上被包裝在一個立即函數調用中,給它一個私有名稱空間)。 – ebohlman
這很漂亮。我可以處理的模塊範圍。謝謝! – Rob