如何在ES6中重试承诺

时间:2017-01-18 23:12:07

标签: javascript node.js ecmascript-6 promise es6-promise

我一直在努力弄清楚如何最好地实施重试,例如使用promises下载失败。我最好的猜测是用一个新的promise来解决一个promise(参见下面的伪代码),但是我在文档中找到的所有东西都是可以使用thenable调用Promise.resolve()(我相信,使用Promise) )。这是否也适用于promise构造函数中的resolve回调?我的方法是正确的还是有更好的方法来实现重试?

function getdata(url) {
   return new Promise(function(resolve, reject) {
      ajaxcall({
         url: url,
         success: function(data) { resolve(data); },
         failure: function(err) { 
            if(retriable(err)) {
               resolve(getdata(url));
            }
            else {
               reject(err);
            }
         }
      });
   });
}

2 个答案:

答案 0 :(得分:4)

你的方法会奏效。当promise被传递给Promise构造函数的resolve回调时,该promise的分辨率值被用作" outer"的解析值。的承诺。

wbBook2.close 包装在一个promise-returns函数中可能会更清晰,这样你就不会混合和匹配promise和callback范例。

eval

答案 1 :(得分:-1)

您可以更改代码以调用Promise中的内部函数。像这样:

function getdata(url) {
   return new Promise(function(resolve, reject) {
    function call() {
     return ajaxcall({
          url: url,
          success: function(data) { resolve(data); },
          failure: function(err) { 
             if(retriable(err)) {
                call();
             }
             else {
                reject(err);
             }
          }
       });
     }
     call(); 
   });
}