Javascript 如何异步运行斐波那契函数?

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

我学习了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 {
    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');

我编辑了我的帖子并添加了一个例子。我希望它对你有用:)