Warum kann ich es nicht so schreiben? Das zurückgegebene a ist undefiniert, der Code wird sequentiell erst ausgeführt, wenn s einen Wert hat
Was soll sein? res.send(s)
还是res.send(s())
Wenn Sie einer Variablen eine Funktion zuweisen, wird die Variable dann ausgeführt, wenn sie deklariert wird?
app.use("/test2",function(req,res,next){
var s=utils.Test(function(value){
console.log("value",value)
console.log("!!!")
return value
})
res.json(s())
})
Die folgende Schreibweise ist in Ordnung
app.use("/test2",function(req,res,next){
utils.Test(function(value){
console.log("value",value)
console.log("!!!")
res.json(s)
})
})
utils.Test()
utils.Test=function(callback){
request("http://localhost:3000/test/1.json",(err,res,body)=>{
let result=JSON.parse(body)
console.log("result",result)
// console.log(typeof result)
callback(result)
})
}
你给的代码是不是有问题,不过大概是因为
utils.Test
是一个异步执行的函数吧,所以你第一种写法在执行res.json(s)
的时候结果还没返回,你把他放在callback function里面执行就不会有这个问题。这段代码哪里声明了 s 是一个函数了?是什么给了你信心让你一口咬定 s 一定是一个函数还信誓旦旦调用了 s?
你并没有把一个函数赋值给一个变量,你把这个函数传递给了一个叫 utils.Test 的函数当第一个参数了啊亲,然后把返回值给了这个变量啊亲。
你说 s 到底是啥?那你要问 utils.Test 啊亲,鬼知道 utils.Test 到底干了什么,鬼知道你传递进去的那个函数,在 utils.Test 里到底经历了什么。