Javascript函数在nodejs中返回未定义的值

标签 javascript node.js callback dom-events asynccallback

我正在编写获取数据的代码。 首先我调用 **getsomedata** 函数来获取数据,并在 getsomedata 函数内部调用另一个函数 getRandomdata 来获取数据并将其返回到前一个函数,但它返回 undefined。但是在 getRandomdata 中可以在 console.log 中看到数据。 我需要使用 callbacks 吗?

router.get('/get-data', function (req, res, next) {
    var result = getsomedata(some_parameter);
    console.log(result);   // receiving undefined
    res.send(result);
});

function getsomedata(some_parameter_recieved) {
    var getsomedata = getRandomdata(random_params);
    console.log(getsomedata);    // receiving undefined
    return getsomedata;
}

function getRandomdata(random_params_recieved) {
    // after some calculation 
    console.log(random_data);           // receiving proper data
    return random_data;
}

最佳答案

Instead of return, you should use callbacks because in asynchronous operations, return does not wait for the I/O operation to complete.

Callback - 在 JavaScript 中,高阶函数可以作为函数中的参数传递。由于 JavaSCript 是单线程的,因此一次只发生一个操作,每个将要发生的操作都在单线程中排队。这样,传递的函数(作为参数)可以在其余父函数操作(async)完成时执行,脚本可以在等待结果的同时继续执行。

通常这个callback函数作为函数的最后一个参数传入。

使用 回调:

router.get('/get-data', function(req, res, next) {
  getsomedata(some_parameter, function(result) {
    console.log(result);
    res.send(result);
  });
});

function getsomedata(some_parameter_recieved, callback) {
  getRandomdata(random_params, function(random_data) {
    callback(random_data);
  });
}

function getRandomdata(random_params_recieved, callback) {
  // after some calculation
  callback(random_data);
}

使用 Promise:

router.get('/get-data', function(req, res, next) {
  getsomedata(some_parameter, function(result) {
    console.log(result);
    res.send(result);
  });
});

function getsomedata(some_parameter_received, callback) {
  getRandomdata(random_params).then(function(random_data) {
    callback(random_data);
  }).catch(function(e) {
    //handle error here
  });
}

function getRandomdata(random_params_received, callback) {
  return new Promise(function(resolve, reject) {
    // after some calculation
    if (RandomDataGeneratedSuccessfully) {
      resolve(random_data);
    } else {
      reject(reason);
    }
  });
}

关于Javascript函数在nodejs中返回未定义的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35308331/

相关文章:

node.js - 在 OS X 上安装 pty.js( Node )时出错

Java Web 应用程序框架,用于处理需要长时间计算的进程的客户端回调

javascript - 如何使用回调重写以消除对单独变量标签的需要?

javascript - AngularJS - 循环中的 API 调用 - 获取数组的最大值并设置响应

javascript - 语法错误: missing brackets after argument list

node.js - 如何通过错误处理在发布/提交请求中流式传输文件?

javascript - 使用回调或 promise 使异步代码像 nodejs 中的同步一样工作

Javascript:在更改之前保留变量值

javascript - 如何防止查询字符串值可见

javascript - 按键排序映射返回排序后的 Map 对象,其第一个键位于最后一个索引中