如何在回调nodejs中访问变量?

时间:2017-12-26 12:32:14

标签: node.js express

我无法获取meal对象中的值虽然我在顶部创建了新对象,但任何人都可以告诉哪个是回调函数中最好的过程访问变量

    let baseUrl = NSSearchPathForDirectoriesInDomains(.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true)

    print("Base Url: \(baseUrl.first!)")

    return baseUrl.first!
}

2 个答案:

答案 0 :(得分:0)

您需要在回调函数中再次使用callback。 :) 你正在做一些异步,这意味着,没有序列代码。 (至少,我记住这一点,不知道别人怎么想这个。)所以,代码应该是:

function somehow(callback) { // you get the result from callback
  var meals = new Object();
  passObj.data = _.map(passObj.data, (x)=> {
    dbHelpder.query(`select * from meals where meal_category = ${x.category_id}`,(error,result)=>{
      meals = x.result;
      passObj.total = 555;
      callback(meals); // Here you get the result
    });
  }
  return x;
}

因此,当您打算使用此功能时,它应该是

function afterMeals(resultMeals) {
  // do something on the meals
}
somehow(afterMeals);

使用其他一些技术可以使其更清晰(例如promise),但实际上你无法避免callback

答案 1 :(得分:0)

首先,我看不出passObj究竟是什么,显然它是在其他地方定义的。

其次,回调函数不会像您认为的那样起作用。通常,使用它们的一个原因是实现异步调用,因此返回值是不可用的。

这个想法如下。通常你有这样的电话:

var myFunc1 = function(){

   return 42;

}

var x = myFunc1(); 

myFunc2(x);

然而,当myFunc1是异步调用时,如果不使用某种类型的promise,则返回值是不可能的,这本身就是一个主题。因此,如果myFunc1是异步调用并且返回了42,例如通过服务器,然后只返回一个值导致该值为null,因为当您到达返回时,不会计算和接收返回值。

这是引入回调的原因。它们以某种方式工作,允许异步调用并在调用完成后以您希望的方式继续进行。要在上面的示例中显示:

var myFunc1 = function( myFunc2, params ){

   // do async stuff here, then call the callback function from myFunc1
   ...
   myFunc2(x);

}

因此异步函数不返回任何内容。它使得它需要进行调用或计算以及何时完成(在x已被声明并赋值的示例中)myFunc2(在我们的示例中是回调函数)直接从异步函数调用。

长话短说 - 在回调函数中直接执行x所需的操作。