我有3个/etc/nginx/nginx.conf
个功能。我在这里尝试做的是,我想调用Node Js
并获取规范化路径,然后检查文件是否存在与normalizeFilePath
一起存在,并且在所有这些之后,创建一个文件,如果该文件尚不存在。这是使用promises的第一天(Bluebird),我是normalizedFilePath
和Node JS
的新手。下面的代码结构越来越复杂。当然,这根本不是一个好主意。
Java Script
我如何管理实施该概念的承诺?
答案 0 :(得分:7)
让我们通过两个简单的步骤改进您的代码。
只要path.normalize
是同步的,它就不应该包含在promise中。
所以它可以那么简单。
var normalizeFilePath = function (filePath) {
return path.normalize(filePath);
};
但是现在让假装 path.normalize
是异步的,所以我们可以使用你的版本。
var normalizeFilePath = function (filePath) {
return new Promise(function (resolve, reject) {
resolve( path.normalize(filePath) );
});
};
同步很糟糕。同步块事件循环。因此,我们将使用fs.existsSync
而不是fs.exists
。
var checkFileExistance = function (filePath) {
return new Promise(function (resolve, reject) {
fs.exists(filePath, function (exists) {
resolve(exists);
});
});
};
正如您所看到的,我们正在包装异步函数,该函数接受带有promise的回调。对于" promisify"这是一个非常普遍的概念。一个函数,所以我们可以使用library。甚至可以使用fs-promise,也就是说 - 你猜它 - fs
有承诺。
现在,我们想要的是一个接一个地做三个动作:
记住这一点,我们的主要功能可能如下所示。
var createProjectFolder = function (projectName) {
normalizeFilePath(projectName)
.then(checkFileExistance)
.then(function (exists) {
if (!exists) {
// create folder
}
})
.catch(function (error) {
// if there are any errors in promise chain
// we can catch them in one place, yay!
});
};
不要忘记添加catch
来电,这样您就不会错过任何错误。