承诺API回调-如何正确解决或拒绝

Promisifying API callbacks - How to properly resolve or reject

本文关键字:解决 拒绝 何正确 API 回调 承诺      更新时间:2023-09-26

我读过类似的文章,但是没有一个完全击中头部,如何正确地做到这一点。

我理解承诺,以及它们通常是如何创建的,成功和失败的监听器等待被触发,要么解决,要么拒绝。

我不明白的是,当我调用一个API方法,它将成功和失败回调作为参数-我如何确定哪个回调被触发,这样我就可以解决或拒绝它?

例如,使用这个Web API并考虑navigator.geolocation。getCurrentPosition方法:
var options = {
  enableHighAccuracy: true,
  timeout: 5000,
  maximumAge: 0
};
function success(pos) {
  var crd = pos.coords;
  console.log('Your current position is:');
  console.log('Latitude : ' + crd.latitude);
  console.log('Longitude: ' + crd.longitude);
  console.log('More or less ' + crd.accuracy + ' meters.');
};
function error(err) {
  console.warn('ERROR(' + err.code + '): ' + err.message);
};
navigator.geolocation.getCurrentPosition(success, error, options);

当API发送回一个成功或错误时它会调用我给它的一个回调,但是我不知道它会调用哪个来解析或拒绝它

那么问题是:侦听正在触发的回调的正确方法是什么? ES6如何保证这类API调用的结果?

像这样:

function getCurrentPositon(options){
   return new Promise(function(resolve, reject){   
     navigator.geolocation.getCurrentPosition(resolve, reject, options);
   });
}

你不知道哪个被调用,相反,你对两个选项都做出反应——失败就拒绝,完成就完成。