Javascript 如何异步运行斐波那契函数?
我学习了node.js,我对异步斐波那契函数有问题 书中的示例没有ES6,但我在示例中使用ES6。也许这是个问题 我的代码:Javascript 如何异步运行斐波那契函数?,javascript,node.js,ecmascript-6,Javascript,Node.js,Ecmascript 6,我学习了node.js,我对异步斐波那契函数有问题 书中的示例没有ES6,但我在示例中使用ES6。也许这是个问题 我的代码: const http = require('http'); const url = require('url'); const fibonacciAsync = exports.fibonacciAsync = (n, done) => { if (n === 1 || n === 2) { done(1); } else { proces
const http = require('http');
const url = require('url');
const fibonacciAsync = exports.fibonacciAsync = (n, done) => {
if (n === 1 || n === 2) {
done(1);
} else {
process.nextTick(() => {
fibonacciAsync(n - 1, (val1) => {
process.nextTick(() => {
fibonacciAsync(n - 2, (val2) => {
done(val1 + val2);
})
})
})
})
}
}
http.createServer((req, res) => {
const urlP = url.parse(req.url, true);
let fibo;
res.writeHead(200, {'Content-Type': 'text/plain'});
if (urlP.query['n']) {
fibo = fibonacciAsync(urlP.query['n']);
res.end('Fibonacci ' + urlP.query['n'] + '=' + fibo);
}
}).listen(8124, '127.0.0.1');
这将返回错误:
TypeError:done不是“done(val1+val2);”中的函数
您的脚本包含以下行:
fibo=fibonacciAsync(urlP.query['n'])
这是对函数的调用fibonacciAsync
。这些函数有两个参数:n
和done
(这是一个回调函数)。
对该函数的调用只包含一个参数,即n
参数,而done
函数为undefined
。因此,当然,完成
不是一个函数
——它是未定义的
编辑:
对于您的要求:我希望这将为您工作
http.createServer((req, res) => {
const urlP = url.parse(req.url, true);
let fibo;
res.writeHead(200, {'Content-Type': 'text/plain'});
if (urlP.query['n']) {
fibonacciAsync(urlP.query['n'], function(data) {
res.end('Fibonacci ' + urlP.query['n'] + '=' + data);
});
}
}).listen(8124, '127.0.0.1');
我编辑了我的帖子并添加了一个例子。我希望它对你有用:)