2015-10-26 253 views
0

我正在使用Q库并希望使promise2函数等待promise1函数完成执行。make函数等待承诺返回nodejs

在以下示例中,promise1函数在promise1函数完成执行之前得到执行。

我在这里做错了什么?

var Q = require("q"); 
var fs = require('fs'); 

function promise1() { 
    var deferred = new Q.defer(); 
    fs.readFile('hostname.json', function (err, data) { 
    if (err){ 
     return console.error(err) 
    }else { 
     console.log('file read'); 
     return deferred.resolve(JSON.parse(data)); 
    } 
    }); 
    return deferred.promise; 
} 
function promise2(){ 
    var deferred = new Q.defer(); 
    var path = 2; 
    console.log("2"); 
    return deferred.resolve(path); 
} 

Q(promise1()) 
    .then(promise2()); 

这里是工作的例子,可能会给出错误,因为readfile不存在,但它确实存在于我的开发环境中。

I get the following result when I run: 
>2 
>file read 

Result I want: 
>file read 
>2 

回答

2

当你写promise2()你立即执行它。尝试:

promise1().then(promise2);

+0

所以它应该是Q(promise1()),然后(promise2)。 – patz

+0

它确实奏效,但不明白为什么, – patz

+0

'Q()'对我的理解是多余的。但是当javascript看到一个方法调用'()'时,它执行该函数。在你原来的情况下,为了解决你调用'.then()'而不是函数定义的函数调用。您可以通过[here](https://github.com/kriskowal/q)完整阅读他们的文档。 – Tony