2017-01-26 37 views
1

我很努力地在Javascript中組織一系列操作作爲承諾(而不是異步瀑布),每個承諾都放在一個文件中,以便我可以自行測試。幾個文件中的承諾

工作main.js,但「p1.p1()」很醜!

p1 = require("./test.js"); 

console.log(p1) 

p1.p1().then(function(val) { 
    console.log(val); // 1 
    return val + 2; 
}).then(function(val) { 
    console.log(val); // 3 
}) 

test.js,在未來,我想有幾個{} 1..X .js文件導入:

exports.p1 = function() { return new Promise(function(resolve, reject) { resolve(1); }); } 

有一個更清潔的方式在節點4.3做到這一點?

回答

1

如果您有p1.p1()唯一的問題是p1重複,你想調用它在較短的方式,那除了你有每個文件只有一個承諾,那麼你可以因爲這樣做的意圖如下:

test.js

module.exports = function() { 
    return new Promise(function (resolve, reject) { 
     resolve(1) 
    }) 
} 

main.js

var p1 = require("./test.js") 

p1() 
    .then(function(p1_result) { 
     console.log("Result of p1: ", p1_result) 
    }) 
    .then(...) 
    .catch(function(err) { 
     // handle errors as you see fit in your case 
    }) 
  • 當心附加功能在test.jsmodule.exports返回的承諾將意味着你只能導出一個功能,但你沒有明確說明這是你想要做什麼。

PS:如果你不使用節點V4.3,你應該考慮使用最新版本(LTS 6.9.x或7.4.x電流)