如何从回调中检索价值?

时间:2014-02-03 19:45:28

标签: javascript node.js callback promise

如何从回调中检索价值? 我首先需要通过名字找到学生,然后计算一些东西并返回结果。 通过名称查找学生的功能返回错误并导致回调,如

function findStudentAndCalculate(name, cb);

cb是回调,它将参数错误和学生实例作为参数。 我通过了cb

function calculateSomething(err, st){
    if(err) throw new Error("Error")
    var result = some stuff with st;
    return result;
}

我应该返回对具有名称参数

的给定URL的页面的响应
findStudentAndCalculate("John", calculateSomething);

2 个答案:

答案 0 :(得分:0)

好吧,您没有为findStudentAndCalculate提供足够的信息来了解回调参数的值,或者您希望如何从回调中存储或返回return值,但是。 。 。一般来说 。 。 。当您将函数作为参数传入时,您只需将该函数视为使用参数作为函数名定义的函数。所以,在你的情况下,在findStudentAndCalculate的某个时刻,你会打这样的电话:

var someVariable = cb(errValue, stValue);

。 。 。要么 。 。

return cb(errValue, stValue);

然后代码就像你直接调用一样:

var someVariable = calculateSomething(errValue, stValue);

。 。 。要么 。 。

return calculateSomething(errValue, stValue);

(分别)

答案 1 :(得分:0)

此回调模式最常用于asynchronous code。鉴于你标记了你的帖子“nodejs”和“promise”,我将假设findStudentAndCalculate是异步的(例如,它必须在某个地方的数据库中查找学生,这需要时间),所以你赢了能够直接用它的返回值做任何事情。

这里有两种可能性:

  1. 如果findStudentAndCalculate是一个典型的Node.js风格的异步函数(并确保看起来像一样典型的函数),那么它将不会返回任何有用的东西。相反,您需要在您提供的回调函数(即内部,calculateSomething本身)内完成所有工作。换句话说,您不仅需要calculateSmething,还需要calculateSomethingAndThenDoSomethingWithWhatYouCalculated)。

  2. 另一方面,如果findStudentAndCalculate返回promise,您可以使用then方法“对您计算的内容做一些事情”。这将允许您将计算代码与使用计算的代码分开。 EG:

    findStudentAndCalculate(name, calculateSomething).then(function (result) {
      // do something with result
    })
    

    然而,这将是构建承诺的非常不寻常的方式。通常情况下,模式看起来更像是这样:

    findStudent(name).then(calculateSomething).then(function (result) {
      // do something with result
    })
    
  3. 就像talemyn所说的那样,我们确实需要更多关于findStudentAndCalculate的信息才能更具体。