异步JS / nodeJS函数返回所需的简明示例

时间:2017-01-19 20:50:37

标签: javascript node.js asynchronous

您好在将此问题标记为重复之前请阅读,我找不到我个人对我的具体问题了解的示例。

这是一个伪代码函数:

foo(a1,a2,a3){
    //do some logic here
   return data
   //lets say the data = 15
    }

foo2(){
    //do some stuff
    data = foo(a1,a2,a3)
    console.log(data)
    }

正如您可能知道的那样,打印的数据未定义,而不是我想要的15。 有人可以请给我一个这个场景的例子。我一直试图理解这几个小时。我不需要冗长的解释。

2 个答案:

答案 0 :(得分:0)

这对我有用:

foo = function(a1,a2,a3) {
    //do some logic here
    var data = a1 + a2 + a3;
    return data;
    //lets say the data = 15
    }

foo2 = function() {
    //do some stuff
    var data2 = foo(5,5,5);
    console.log(data2);
    return data2
    }

foo2();

它将15记录到控制台,并返回15 ...

由于您的伪代码有点模糊,没有人确切知道您遇到了什么问题,但我认为您将从阅读有关此处的悬挂中受益 - https://www.interviewcake.com/question/python/js-scope。我不打算从网站上复制粘贴答案,因为它的格式要好得多。 :)

答案 1 :(得分:0)

让我们首先重写你的伪代码,以反映第一个函数中包含的逻辑的异步性质:

foo(a1,a2,a3){
  //do some *async* logic here
  regressionFunction(a1, a2, a3, function(result) {
    data = result;
  });
  
  return data;
  //lets say the data = 15
}

foo2(){
  //do some stuff
  data = foo(a1,a2,a3)
  console.log(data)
}

这会导致data undefined foo2 data,因为foo返回时尚未设置Promise。因此,异步。

有几种方法可以解决这个问题,但最简单的方法是使用Promise。将data视为保证未来值的占位符,然后我们可以指示我们的代码在继续之前等待。

不是简单地在foo中返回Promise,而是在data准备就绪时返回foo = function(a1,a2,a3) { return new Promise(function(resolve, reject) { regressionFunction(a1, a2, a3, function(result) { resolve(result); }); }); }来解决:

foo

然后我们使用foo2实例的Promise方法,而不是期望thenfoo2 = function() { //do some stuff var data2 = foo(5,5,5); data2.then(function(result) { console.log('Finally got a result!', result); }); }的结果立即可用。

foo2

如果你需要根据foo的结果从.then返回一个值,当然,你也需要在那里返回一个Promise。方便的是,Promise方法的返回类型本身就是foo2 = function() { //do some stuff var data2 = foo(5,5,5); return data2.then(function(result) { console.log('Any function receiving this as input can access the result now by accessing the `.then` method of this function'); return result; }); } ,所以我们可以简单地返回它:

Maximum UPDATE/DELETE statements per day per table: 48 
Maximum UPDATE/DELETE statements per day per project: 500 
Maximum INSERT statements per day per table: 1,000 
Maximum INSERT statements per day per project: 10,000

这是Promises的简化,但应该让你开始。