node.js承诺序列

时间:2016-03-13 16:57:27

标签: node.js promise

在测试node.js promise框架期间。我得到了一个奇怪的结果。 这是一个代码。

var Promise = require('promise');

var fs = require('fs');
var src = '/tmp/myfile.txt';
var des = '/tmp/myfile_promise2.txt';

var fread = Promise.denodeify(fs.readFile);
var fwrite = Promise.denodeify(fs.writeFile);

fread(src)
        .then(
            function(text){
                console.log('Read done');
                return fwrite(des,text);
            })
        .then(console.log('Write done'))
        .catch(function(reason){
            console.log('Read or Write file error');
            console.log(reason);
        });

文件已成功写入。但控制台输出如下所示

  

写完了   完成阅读

我的预期结果是,首先打印“Read done”然后“Write done”。 出了什么问题?

1 个答案:

答案 0 :(得分:3)

Thanx @ E_net4 ^ @Joachim Isakkson

用函数包装后,它可以工作。 我需要再次学习承诺创造生命周期。

var Promise = require('promise');

var fs = require('fs');
var src = '/tmp/myfile.txt';
var des = '/tmp2/myfile_promise2.txt';

var fread = Promise.denodeify(fs.readFile);
var fwrite = Promise.denodeify(fs.writeFile);

fread(src)
.then(
        function(text){
            console.log('Read done');
            return fwrite(des,text); // 체이닝을 하려면 return을 해줘야 함. 
        })
        .then(function(){
            console.log('Write done');
        })
        .catch(function(reason){
            console.log('Read or Write file error');
            console.log(reason);
        });