我制作了一个 nodejs 脚本来将 css 文件上传到我们的 Web 应用程序。我省略了所有不必要的内容:
var downloadCSS = function() {
var download = wget.download(src, output, options);
download.on('end', function(outputMessage) {
var unzipStream = fs.createReadStream(output).pipe(unzip.Extract({ path: path }));
unzipStream.on('close', function() {
findFilesAsync(path);
});
});
}
var findFilesAsync = function(path) {
for (var vendor in searchList) {
(function(filePath, vendor, loginCredentials){
glob(filePath, function(err, files) {
login(loginCredentials, files[0], vendor);
})
})(filePath, vendor, loginCredentials);
}
};
var login = function(credentials, file_local, vendor) {
request.post(
'https://server',
function(error, response, body) {
getSettings(cookie, file_local, vendor);
}
);
};
var getSettings = function(cookie, file_local, vendor) {
request.get(
'https://server',
function(error, response, body) {
fileUpload(cookie, settings, file_local, vendor);
}
);
};
var fileUpload = function(cookie, settings, file_local, vendor) {
var CSS_file = fs.createReadStream(file_local);
CSS_file.on('error', function(err) {
console.log('error at reading CSS file');
});
request.post(
'https://server',
function(error, response, body) {
setSettings(cookie, settings, vendor);
}
);
};
var setSettings = function(cookie, settings, vendor) {
request.put(
'https://server',
function(error, response, body) {
logout(cookie, settings, vendor);
}
);
};
var logout = function(cookie, settings, vendor) {
request.get(
'https://server',
function(error, response, body) {
}
);
};
要上传 css 文件,如果没有错误,函数将从上到下调用:
downloadCSS()
findFilesAsync()
login()
getSettings()
fileUpload()
setSettings()
logout()
有 5 个 CSS 文件,因此只要在 findFilesAsync()
函数中找到文件,就会异步调用一个新的 login()
函数。
我知道通过 Promise 可以更干净地完成此任务,但我不知道从哪里开始?
最佳答案
看看这个 MDN Promise reference他们为使用 Promise 的 http 请求提供了一个很好的示例函数。因此,为了避免回调,您必须更改/修改您的 request
类
关于javascript - 将回调转换为nodejs中的promise,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36720292/