2017-03-07 4 views
0

画像が有効な場合は、APIをチェックしようとしています。私は約束でそれをやっている、私はAPIのチェックが私に失敗を返す場合は、約束を実行し、fuctionを呼び出すことを望む。約束を停止または中止する

Heres my code。

My機能は約束

checkPhotos(options,formData, "front", res, false).then(function(response) { 
    if(response!== 'error'){ 
     options.url = 'http://'+config.verifier_host+':'+config.verifier_port+config.verifier_endpoint_sc; 
     readImage = fs.createReadStream("tmp/"+imgOne+".jpeg"); 
     formData = { 
      uuid   : request.uuid, 
      document_type : 1, //req.body.document_type 
      analysis_type : 1, 
      document_image: { 
       value: readImage, 
       options: { 
        filename: 'tmp/'+imgOne+'.jpeg', 
        contentType: null 
       } 
      } 
     }; 

     console.log("2a Ejecución") 
     return checkPhotos(options,formData, "back", res, false); 
    }else { 
     return; 
    } 
}).then(function(response) { 
    if(response!== 'error'){ 
     options.url = 'http://'+config.verifier_host+':'+config.verifier_port+config.verifier_endpoint_sc; 
     readImage = fs.createReadStream("tmp/"+nombreImagenBackimg2+".jpeg"); 
     formData = { 
      uuid   : request.uuid, 
      document_type : 1, //req.body.document_type 
      analysis_type : 2, 
      document_image: { 
       value: readImage, 
       options: { 
        filename: 'tmp/'+img2+'.jpeg', 
        contentType: null 
       } 
      } 
     }; 

     console.log("3a Ejecución") 
     return checkPhotos(options,formData, "back", res, false); 
    }else { 
     return; 
    } 
}).then(function(response) { 
    if(response!== 'error'){ 
     readImage = fs.createReadStream("tmp/"+nombreImagenSelfieimg3+".jpeg"); 
     formData = { 
      uuid  : request.uuid, 
      selfie_image: { 
       value: readImage, 
       options: { 
        filename: 'tmp/'+img3+'.jpeg', 
        contentType: null 
       } 
      } 
     }; 
     options.url = 'http://'+config.verifier_host+':'+config.verifier_port+config.verifier_endpoint_tc; 
     console.log("4a y última ejecución") 
     return checkPhotos(options, formData, null, res, true, request); 
    }else { 
     return; 
    } 
}).catch(function(err) { 
    logger.error('PID ' + process.pid + ' Error response' + err.message); 
    console.log("Catch -> "+ err.message); 
}); 

My機能の約束を呼び出します。

function checkPhotos (options, formData, positionPhoto, res, bandera, request) { 
var promise = new Promise(function (resolve, reject) { 

    var post_req = requests.post({headers: {Authorization : options.headers.authorization}, url:options.url, formData: formData}, function (err, httpResponse, body) { 
     if (err) { 
      logger.error(' PID ' + process.pid + err); 
      return console.error('Error:', err); 
     } 

     if(!body){ 
      logger.error(' PID ' + process.pid + formData.document_image.options.filename); 
      return false; 
     } 

     responseBody = JSON.parse(body); 
     if(bandera){ 
      if(responseBody.success === 'error'){ 
       resolve(responseBody.success); 
       return getData(null, res, responseBody); 
      }else { 
       resolve(formData); 
       getData(null, res); 
      } 
     }else { 
      if(responseBody.success === 'error'){ 
       logger.error(' PID ' + process.pid + responseBody); 
       resolve(responseBody.success); 
       return getData(null, res, responseBody); 
      }else { 
       resolve(formData); 
       console.log("Success") 
      } 
     } 
    }); 
}); 

return promise; 

}エラーの代わりにresolve

+0

は、代わりにオブザーバーを使用しています。 – Jai

+0

@Jaiと同様、「約束」は取り消すことができますが、「観察可能」は取り消すことができます。 –

答えて

0

コールreject。この方法では、約束チェーンはすぐに拒否され、その後の.thenへの呼び出しは実行されません。

.thenコールの中からプロミスチェーンを停止する場合は、Promise.reject(…)の値を返すか、エラーを返すことができます。

例:

const promise = checkPhotos(...); 

promise 
.then(askApi) 
.then((response) => { throw response.body; }) 
.then(willNotBeExecuted) 
.catch(thisWillbeExecutedAfterThrow); 

function checkPhotos (options, formData, positionPhoto, res, bandera, request) { 
    return (resolve, reject) => { 
    // … make request 
    if (!bandera) { reject(getData); } 
    }; 
} 
関連する問題