2016-09-23 44 views
0

我有兩個javascript函數。在Javascript函數中連接數據

這是一個功能,其他的也是一樣的。

function function1(.., .., callback){ 
    //database logic 

callback(data); 

} 

我的要求是從這兩個函數獲取數據併發送到客戶端。

function sendFunction(){ 

    function1(.., .., function(data1)){ 
     console.log(data1); 
    } 

    function2(.., .., function(data2)){ 
     console.log(data2); 
    } 

    sendToClient(data1+data2); 
} 

我的問題是如何從函數外部取data1和data2來連接。指導我完成這項任務。

+0

你是否從這兩個函數中返回'data1'和'data2'? –

+0

使用回調函數 – Shashika

+0

您是否打印過'console.log(data1,data2)'? –

回答

0

做某事,如:

var datas=[]; 
var count=0; 
function callback(data){ 
count++; 
datas.push(data); 
if(count==2){ 
//perfect both callbacks returned 
proceedwith(datas); 
} 
} 
function1(callback); 
function2(callback); 

如果他們是JSON對象,你不能添加。將它們存儲到一個數組或對象的內部,或將它們串化爲一個對象

+0

在這裏我解釋了我需要做的事情。你是對的。我需要數組來存儲兩個對象。但這不是問題在這裏 – Shashika

2

考慮到function1function2是同步的,您必須在函數之外創建兩個用於存儲返回值的變量。

function sendFunction() { 
    var data1, data2; 

    function1(.., .., function(d1) { 
     data1 = d1; 
     console.log(data1); 
    }); 

    function2(.., .., function (d2) { 
     data2 = d2; 
     console.log(data2); 
    }); 

    sendToClient(data1 + data2); 
} 

編輯:

對於異步功能,我建議你使用承諾:

function function1() { 
    return new Promise(function (resolve, reject) { 
     // logic here 

     // If everything is ok, call resolve(). 
     resolve("data1"); 

     // If something went wrong, call reject(). 
    }); 
} 

function function2() { 
    return new Promise(function (resolve, reject) { 
     // logic here 

     // If everything is ok, call resolve(). 
     resolve("data2"); 

     // If something went wrong, call reject(). 
    }); 
} 

function sendFunction() { 
    Promise.all([function1(), function2()]) 
    .then(function (result) { 
     sendToClient(result[0] + result[1]); 
    }) 
    .catch(function() { 
     console.log("The request failed. Try again.") 
    }); 
} 

sendFunction(); 
+0

這是行不通的 – Shashika

+1

@felipeptcho看起來像函數是異步的...... –

+0

沒錯。我會調整代碼。 – felipeptcho

0

最後,我找到了一種方法來做到這一點。

function sendFunction() {  

    function1(.., .., function(data1) { 
     console.log(data1); 

     function2(.., .., function(data2) { 
      console.log(data2); 

      sendToClient(data1 + data2); 
     }); 
    }); 


    sendToClient(data1 + data2); 
} 
+0

這不是一個好方法,因爲它包含嵌套。如果你有兩個以上的功能,它變得複雜。請使用新的JavaScript Promises來檢查我的更新答案。 – felipeptcho

+1

您不需要使用'var data1,data2'和這些分配。只需去'function(data1){'和'function(data2){'直接。 – Bergi

+0

非常感謝。我會編輯我的答案。 – Shashika