在Javascript函数中连接数据

Concatenate data in Javascript functions

本文关键字:连接 数据 函数 Javascript      更新时间:2023-09-26

我有两个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从函数连接。指导我完成这个任务。

考虑到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);
}
编辑:

对于异步函数,我建议你使用Promises:

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();

做某事:

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对象,则不能添加。将它们存储在数组中,或者存储在对象中,或者将它们字符串化

最后,我找到了一个方法。

function sendFunction () {      
    function1(.., .., function(data1) {
        console.log(data1);
        function2(.., .., function(data2) {
           console.log(data2);
            sendToClient(data1 + data2);
        });
    });

    sendToClient(data1 + data2);
}