2015-01-14 62 views
0

我认为在这种情况下一个例子是更好的超过1000个字:如何异步执行JavaScript代码段并等待结果?

function fib(num) { 
    if (num <= 1) 
     return 1; 

    return fib(num-1) + fib(num-2); 
} 

function asyncFib(num) { 
    if (num <= 1) 
     return 1; 

    var a = asyncCall(fib, [num-1]); 
    // don't wait for fib(n-1) 
    // and perform fib(n-2) in 'parallel' 
    var b = asyncCall(fib, [num-2]); 

    // wait the results for fib(n-1) and fib(n-2) and use them 
    return a + b; 
} 

斐波那契算法只是一个例子,我想学习如何在JavaScript中添加并发的“分治法”。我发现node.js和异步包可能是一个答案,但我不知道如何。

有人可以帮我吗? 谢谢!

回答

0

您可以使用PromiseJs

这一个简单的例子:

var Promise = require('promise'); 

function fib(num) { 
return new Promise(function(resolve,reject){ 
if (num <= 1) 
    resolve(1); 

resolve(fib(num-1) + fib(num-2)); 
}); 

} 

function asyncFib(num) { 
if (num <= 1) 
    return 1; 
var promiseAResolved = false; 
var promiseBResolved = false; 

var a = asyncCall(fib, [num-1]).then(function(result){ 
    promiseAResolved = true; 

    if(promiseAResolved === true && promiseBResolved === true){ 
    return a + b; 
    } 

}); 

var b = asyncCall(fib, [num-2]).then(function(result){ 
    promiseBResolved = true; 

    if(promiseAResolved === true && promiseBResolved === true){ 
    return a + b; 
    } 

}); 


return a + b; 
} 

的更多信息:https://github.com/then/promise 和Q.js:https://github.com/kriskowal/q