2016-09-23 8 views
0

私は2つのjavascript関数を持っています。Javascript関数でデータを連結

これは1つの機能であり、他の機能も同じです。

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

ここで私は何をする必要があるかを理解しました。あなたは正しいです。私は2つのオブジェクトを格納するために配列が必要です。しかし、それはここでは問題ではありません – Shashika

2

function1function2が同期していることを考慮すると、戻り値を格納する関数の外に2つの変数を作成する必要があります。

function sendFunction() { 
    var data1, data2; 

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

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

    sendToClient(data1 + data2); 
} 

EDIT:非同期機能のために

、私はあなたが約束を使用することをお勧め:

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

これには入れ子が含まれているため、良い方法ではありません。 3つ以上の機能を持つ場合、複雑になります。新しいJavaScript Promiseを使用して、私の更新された回答を確認してください。 – felipeptcho

+1

'var data1、data2'とその割り当てを使う必要はありません。 'function(data1){'と 'function(data2){'を直接呼び出してください。 – Bergi

+0

ありがとうございました。私は私の答えを編集します。 – Shashika

関連する問題