2017-12-24 4 views
1

私はnode.jsを学び、非同期フィボナッチ関数に問題があります。fibonacci関数をasyncで実行するには?

本の例では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'); 

これは私にエラーを返します:fibo = fibonacciAsync(urlP.query['n']);機能fibonacciAsyncへの呼び出しです:

TypeError: done is not a function in "done(val1 + val2);"

答えて

1

スクリプトはこの行が含まれています。関数は2つの引数:ndone(コールバック関数)をとります。 この関数への呼び出しには、引数が1つのみ(n)あり、doneの関数はundefinedです。もちろん、donefunctionではありません - それは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'); 
+0

ありがとうございました。自分のコードの例を教えてもらえますか? – zahabim

+0

私の投稿を編集して例を追加しました。私はそれがあなたのために動作することを願って:) – TamirNahum

+0

はい、非常に感謝! – zahabim

関連する問題