Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 递归调用承诺_Javascript_Node.js_Bluebird - Fatal编程技术网

Javascript 递归调用承诺

Javascript 递归调用承诺,javascript,node.js,bluebird,Javascript,Node.js,Bluebird,我有一个方法可以进行post调用,成功后会解析承诺,但是如果post调用由于某种原因失败,我想实现递归逻辑来调用解析承诺的方法。我如何实施这一点,以有效地处理承诺。下面是我正在尝试的代码。现在,当服务调用失败时,它正在重试,但我遇到了未处理的拒绝错误,它正在自己重试,然后它正在拒绝 dummyService.getAction = (requestData) => { var options = { url: config.url, json: t

我有一个方法可以进行post调用,成功后会解析承诺,但是如果post调用由于某种原因失败,我想实现递归逻辑来调用解析承诺的方法。我如何实施这一点,以有效地处理承诺。下面是我正在尝试的代码。现在,当服务调用失败时,它正在重试,但我遇到了未处理的拒绝错误,它正在自己重试,然后它正在拒绝

dummyService.getAction = (requestData) => {

    var options = {
        url: config.url,
        json: true,
        body: requestData,
        method: 'post',
        headers: {
            'Content-Type': 'application/json',
            'Accept': 'application/json',
            'x-request-id': 'IntegrationTesting'
        }
    }

    return new Promise(function (resolve, reject) {
     request(options, function (error, response, body) {

            const success = new RegExp('^2\\d{2}$');
            const failure = new RegExp('^4\\d{2}$');

            if (error) {                
                reject(response);
            }
            else if (failure.test(response.statusCode) || recursive > 5) {                
                reject(response);
            }
            else if (success.test(response.statusCode) && body) {                
                resolve(body);
            }
            else {                
                recursive++;
                setTimeout(function () {
                    dummyService.getAction(requestData)
                }, 500);
            }
        })
    })
}

问题是当您重试时,
dummyService.getAction
返回的承诺基本上被忽略了。试试这个:

setTimeout(function () {
    dummyService.getAction(requestData).then(resolve, reject);
}, 500);

是的,你是对的,我不知道如何处理它,你在这里提供的解决方案不起作用,不幸的是:(我终于在这里找到了我问题的解决方案