JavaScript承诺是什么时候创建的?

JavaScript承诺是什么时候创建的?,javascript,promise,es6-promise,Javascript,Promise,Es6 Promise,我在React代码中使用承诺已经有一段时间了。但是我必须包括babel polyfill库,以支持promises和map功能,用于不支持最新JavaScript ES6的浏览器,让我们称之为这些旧浏览器 现在让我困惑的是,异步函数是如何在旧浏览器中编写的。Internet Explorer不支持异步,那么它们是如何编写的呢? 我还读到,承诺不是异步函数本身,而是管理异步函数的工具。那么,如果开发人员想要开发自己的promise功能,他可以编写哪些核心异步函数? setTimeout函数是否是实

我在React代码中使用承诺已经有一段时间了。但是我必须包括babel polyfill库,以支持promises和map功能,用于不支持最新JavaScript ES6的浏览器,让我们称之为这些旧浏览器

现在让我困惑的是,异步函数是如何在旧浏览器中编写的。Internet Explorer不支持异步,那么它们是如何编写的呢? 我还读到,承诺不是异步函数本身,而是管理异步函数的工具。那么,如果开发人员想要开发自己的promise功能,他可以编写哪些核心异步函数?
setTimeout
函数是否是实现此目的的唯一方法?

异步回调的旧方法 处理没有承诺的异步函数的通常方法是使用回调函数。例如,您提到的
setTimeout
函数(请参阅上的文档),该函数将(回调)函数作为其第一个参数,当计时器完成时将调用该函数

还有许多其他的函数也是这样设计的,也许最显著的是AJAX API:。这允许您注册事件监听器(也称为回调函数),在AJAX调用完成时调用这些监听器:

var oReq = new XMLHttpRequest();

oReq.addEventListener("progress", updateProgress);
oReq.addEventListener("load", transferComplete);
oReq.addEventListener("error", transferFailed);
oReq.addEventListener("abort", transferCanceled);

oReq.open();
说到事件监听器,标准DOM事件监听器也是使用回调处理异步的示例。以下是单击事件的示例(同样来自):


document.getElementById(“测试”).addEventListener(“单击”),函数(事件){
//在单击的div中显示当前的单击计数
event.target.textContent=“单击计数:”+event.detail;
},假);
新方法:承诺 那么,承诺从何而来?Promises是一个相当简单的抽象,它(至少在JS中)构建在回调之上。换句话说,(几乎)所有JS调用函数中的API函数都是在幕后实现的,就像上面提到的那样

一个是通过给一个执行器来构造的,它将得到两个回调函数,一个表示成功(并返回一个值),
resolve
,另一个表示失败,
reject

var p = new Promise( /* executor */ function(resolve, reject) { ... } )
例如,我们可以这样构造计时器承诺:

new Promise(function(resolve,reject) {setTimeout(resolve, delay);};
new Promise(function(resolve, reject) {
    var oReq = new XMLHttpRequest();

    oReq.addEventListener("load", resolve);
    oReq.addEventListener("error", reject);
    oReq.addEventListener("abort", reject);

    oReq.open();
});
或者像这样的AJAX承诺:

new Promise(function(resolve,reject) {setTimeout(resolve, delay);};
new Promise(function(resolve, reject) {
    var oReq = new XMLHttpRequest();

    oReq.addEventListener("load", resolve);
    oReq.addEventListener("error", reject);
    oReq.addEventListener("abort", reject);

    oReq.open();
});
异步的旧方法:回调 处理没有承诺的异步函数的通常方法是使用回调函数。例如,您提到的
setTimeout
函数(请参阅上的文档),该函数将(回调)函数作为其第一个参数,当计时器完成时将调用该函数

还有许多其他的函数也是这样设计的,也许最显著的是AJAX API:。这允许您注册事件监听器(也称为回调函数),在AJAX调用完成时调用这些监听器:

var oReq = new XMLHttpRequest();

oReq.addEventListener("progress", updateProgress);
oReq.addEventListener("load", transferComplete);
oReq.addEventListener("error", transferFailed);
oReq.addEventListener("abort", transferCanceled);

oReq.open();
说到事件监听器,标准DOM事件监听器也是使用回调处理异步的示例。以下是单击事件的示例(同样来自):


document.getElementById(“测试”).addEventListener(“单击”),函数(事件){
//在单击的div中显示当前的单击计数
event.target.textContent=“单击计数:”+event.detail;
},假);
新方法:承诺 那么,承诺从何而来?Promises是一个相当简单的抽象,它(至少在JS中)构建在回调之上。换句话说,(几乎)所有JS调用函数中的API函数都是在幕后实现的,就像上面提到的那样

一个是通过给一个执行器来构造的,它将得到两个回调函数,一个表示成功(并返回一个值),
resolve
,另一个表示失败,
reject

var p = new Promise( /* executor */ function(resolve, reject) { ... } )
例如,我们可以这样构造计时器承诺:

new Promise(function(resolve,reject) {setTimeout(resolve, delay);};
new Promise(function(resolve, reject) {
    var oReq = new XMLHttpRequest();

    oReq.addEventListener("load", resolve);
    oReq.addEventListener("error", reject);
    oReq.addEventListener("abort", reject);

    oReq.open();
});
或者像这样的AJAX承诺:

new Promise(function(resolve,reject) {setTimeout(resolve, delay);};
new Promise(function(resolve, reject) {
    var oReq = new XMLHttpRequest();

    oReq.addEventListener("load", resolve);
    oReq.addEventListener("error", reject);
    oReq.addEventListener("abort", reject);

    oReq.open();
});

谢谢Hjulle。你的回答很有用,谢谢你。你的回答很有用。