javascript - 将回调转换为nodejs中的promise

标签 javascript node.js callback promise

我制作了一个 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/

相关文章:

c# - 在 C# ASP.NET 中预处理 HighCharts JS 中的数据

javascript - 如何刷新简单的验证码

来自 c dll 的 c# 回调,指向 c# 类的指针 arg

android 模拟器在 Retrofit CallBack 中崩溃

javascript - this.setState 使变量未定义?

javascript - babel es5 到 es6 在导入时将 less 扩展转换为 css

javascript - 为什么webpack找不到loader

mysql - 使用 Node.js (Express) 和 mySQL 插入 TIMESTAMP?

json - 为 Alamofire 创建回调,我可以用它来操作 JSON

Javascript 在下拉选择中打开特定 URL