【发布时间】:2021-08-15 13:45:58
【问题描述】:
根据我昨天问的:Taking a value from Promise and returning it instead of console.log
我仍然有一个问题,因为当我尝试打开函数列表时,return results 甚至在它进入函数之前就发生了。我不能使用async/await,所以这就是我在这个练习中挣扎的原因。
有什么办法:
- 如果我
console.log(fun1(1000,callback))它不会返回任何东西(未定义),但我希望它返回值res,但不是 console.logging 它,只是为了让回调返回它。 - 想法是将
results接受的那些结果放入pred,例如大于 5。 - 我知道问题可能出在
setTimeout上,但正如我昨天发布的帖子中所述 - 我无法使用async/await来解决该问题。
我的代码:
function fun1(value,cb) {
if ((value * 100) > 400) {
setTimeout(() => cb(null, value*100), 1000)
}
else {
setTimeout(() => cb(new Error("error")), 1000)
}
}
function fun2(value,cb) {
if ((value * 20) > 50) {
setTimeout(() => cb(null, value*20), 2000)
}
else {
setTimeout(() => cb(new Error("error")), 2000)
}
}
function fun3(value,cb) {
if ((value -30 ) > 0) {
setTimeout(() => cb(null, value-30), 3000)
}
else {
setTimeout(() => cb(new Error("error")), 3000)
}
}
function callback(err, res) {
if (err) {
console.log(err)
}
else {
console.log(res)
return res
}
}
console.log(fun1(1000,callback))
const together = (funcs, pred) => (n) => {
let results = []
funcs.reduce((prev,curr) => {
if (curr(n,callback) > pred) {
results.push(curr(n,callback))
}
}, 0)
return results
};
console.log(together([fun1,fun2,fun3], 5)(10))
【问题讨论】:
-
我有一个问题,如果我删除那些超时,它仍然是异步函数吗?
-
我的问题怎么样 - 如果我删除这些超时,它仍然是异步函数吗?很多次我都无法真正理解异步的含义。
-
你问过
setTimeout吗?setTimeout就像一个定时器,它稍后执行一个单元(回调), -
我的意思是 - 如果我删除 setTimeout,只留下 return cb(....),它是否仍然是 (fun1) 异步函数?
-
不!为什么会这样?
标签: javascript node.js asynchronous callback