取代承诺

时间:2017-12-20 18:43:36

标签: node.js promise async-await

我有一段这样的代码:

export default function imageProcessing() {
  return async function (ctx, next) {
    /* some code is here */
    const request = new Promise(resolve => protocol.get(imageUrl, resolve));
    const result = await request;
    if (result.statusCode >= 400) {
      ctx.status = result.statusCode;
      return next();
    }
    ctx.status = result.statusCode;
    /* some more code in between */
    ctx.type = `image/${format}`;
    ctx.body = result.pipe(transformer);
  };
}

Eslint向我显示一些错误(因为不允许承诺)。 错误:

  

ESLint:Opera Mobile 12,Opera Mini全部不支持Promise,   IE Mobile 10,IE 9,Blackberry Browser 7(compat / compat)

我无法修改/避免这种情况,因为它是严格禁止的。我怎样才能取代Promise?有人可以纠正这个吗?

1 个答案:

答案 0 :(得分:1)

可能,

  1. ESLint配置更改需要您项目的小时。
  2. ESlint消息是正确的,Promises在这些浏览器中不可用,但是'export',async / await和template literal(image/${format})也是如此。你也需要删除它们。
  3. 如果在任何情况下您想要替换代码,请检查Babel-Repl,粘贴您的代码并检查其替代代码。 (根据可读性,这将是最差的代码)
  4. 正如所建议的那样给予转运者一个机会。这是解决此兼容性问题的最佳方法,但也会要求您更改ESlint设置。
  5. 直接转换而不理解以上4点,

    protocol.get(imageUrl, function(result){
    
    if (result.statusCode >= 400) {
      ctx.status = result.statusCode;
      return next();
    }
    ctx.status = result.statusCode;
    /* some more code in between */
    ctx.type = `image/${format}`;
    ctx.body = result.pipe(transformer);
    }));
    
  6. 同样,这也容易出现容易出错的未来。 请专注于#1来解决这个问题。