Javascript 如何从回调中检索值?
如何从回调中检索值? 我需要先找到学生的名字,然后计算一些东西,然后返回结果。 按名称查找学生的函数返回err并导致回调,如Javascript 如何从回调中检索值?,javascript,node.js,callback,promise,Javascript,Node.js,Callback,Promise,如何从回调中检索值? 我需要先找到学生的名字,然后计算一些东西,然后返回结果。 按名称查找学生的函数返回err并导致回调,如 function findStudentAndCalculate(name, cb); cb是回调函数,它以err和student实例作为参数。 我通过了cb考试 function calculateSomething(err, st){ if(err) throw new Error("Error") var result = some stuff w
function findStudentAndCalculate(name, cb);
cb是回调函数,它以err和student实例作为参数。
我通过了cb考试
function calculateSomething(err, st){
if(err) throw new Error("Error")
var result = some stuff with st;
return result;
}
我应该使用name参数返回给定url的页面响应
findStudentAndCalculate("John", calculateSomething);
嗯,您没有为我们提供足够的信息,以便
findStudentAndCalculate
了解回调参数使用的值,或者您希望如何存储或返回回调中的return
值,但是。一般来说当您将函数作为参数传入时,只需将函数视为使用参数作为函数名定义的函数。因此,在您的情况下,在findStudentAndCalculate
中的某个点上,您将进行如下调用:
var someVariable = cb(errValue, stValue);
findStudent(name).then(calculateSomething).then(function (result) {
// do something with result
})
。或者
return cb(errValue, stValue);
return calculateSomething(errValue, stValue);
然后,代码的作用就好像您直接调用了:
var someVariable = calculateSomething(errValue, stValue);
。或者
return cb(errValue, stValue);
return calculateSomething(errValue, stValue);
(分别)此回调模式最常用于。考虑到您将帖子标记为“nodejs”和“promise”,我将假设
findStudentAndCalculate
是异步的(例如,它必须在某个数据库中查找学生,这需要时间),因此您无法直接使用它的返回值
这里有两种可能性:
findStudentAndCalculate
是一个典型的Node.js风格的异步函数(它看起来确实像一个典型的函数),那么它将不会返回任何有用的内容。相反,您需要在您提供的回调函数中完成所有工作(即,calculatemething
本身)。换句话说,您不仅需要calculateSmething
,还需要calculateSmething,然后使用您计算的内容进行dosomething
)findStudentAndCalculate
返回a,则可以使用它的then
方法“对计算结果进行处理”。这将允许您将用于计算的代码与使用该计算的代码分开。例如:
findStudentAndCalculate(name, calculateSomething).then(function (result) {
// do something with result
})
不过,这将是一种非常不寻常的构建承诺的方式。通常情况下,模式看起来更像这样:
var someVariable = cb(errValue, stValue);
findStudent(name).then(calculateSomething).then(function (result) {
// do something with result
})
不过,正如塔莱明所说,我们确实需要更多关于
findStudentAndCalculate
的信息,才能更具体一些。你不需要。您可以在回调中使用该值。findStudentAndCalculate
函数应该将数据传递到cb
@cookiemonster我有这些函数,不能更改,我需要返回这个执行链的结果。如果你不能更改它们,那么你就卡住了。抱歉。这将假定findStudentAndCalculate()
是同步的。虽然这是可能的,但它会让人纳闷为什么它会收到回调。@cookiemonster-我能想到原因。如果有一大堆函数依赖于学生信息,那么可能有人会设置一个函数,以标准方式检索学生信息,然后将其传递给下一个函数(名称实际上暗示了这一点)。我并不是说这是最佳的方法,但是,在对其他人的代码进行了多年的研究之后,我学会了不要太在意为什么人们选择了一种方法而不是另一种方法。:)