2016-09-23 2 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); 
} 

Моя проблема заключается в том, как я могу взять внешние данные1 и data2 из функций для конкатенации. Направляйте меня к достижению этой задачи.

+0

Вы возвращаете 'data1' и' data2' из обеих функций? –

+0

с использованием обратных вызовов для обеих функций – Shashika

+0

Вы напечатали 'console.log (data1, data2)'? –

ответ

0

Do STH как:

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

Учитывая, что function1 и function2 являются синхронными, вам необходимо создать две переменные за пределами функций для хранения возвращаемых значений.

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 выглядит как функции async ... –

+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. – felipeptcho

+1

Вам не нужно использовать 'var data1, data2' и эти назначения. Просто перейдите к 'function (data1) {' и 'function (data2) {' напрямую. – Bergi

+0

Большое спасибо. Я отредактирую свой ответ. – Shashika

Смежные вопросы