如何从回调中检索价值? 我首先需要通过名字找到学生,然后计算一些东西并返回结果。 通过名称查找学生的功能返回错误并导致回调,如
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);
答案 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
是异步的(例如,它必须在某个地方的数据库中查找学生,这需要时间),所以你赢了能够直接用它的返回值做任何事情。
这里有两种可能性:
如果findStudentAndCalculate
是一个典型的Node.js风格的异步函数(并确保看起来像一样典型的函数),那么它将不会返回任何有用的东西。相反,您需要在您提供的回调函数(即内部,calculateSomething
本身)内完成所有工作。换句话说,您不仅需要calculateSmething
,还需要calculateSomethingAndThenDoSomethingWithWhatYouCalculated
)。
另一方面,如果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
})
就像talemyn所说的那样,我们确实需要更多关于findStudentAndCalculate
的信息才能更具体。