JavaScript承诺的定义和事件的区别是什么?

JavaScript承诺的定义和事件的区别是什么?,javascript,Javascript,我几年前就开始处理JavaScript了。所以我对术语“事件”很熟悉,它是当某个事件发生时自动执行的函数。如果我的定义有误,请纠正我 现在我必须再次处理语言问题。试着从这个对我来说很新鲜的承诺中得到一个想法。但是找不到任何好的定义 有人能给出一个简单易懂的JavaScript承诺定义吗 更多内容:在我看来,它们与事件非常相似。您定义了一个回调函数,该函数在某个事件发生时自动调用 JavaScript事件和-承诺之间有什么区别?对于第一个视图,它们非常相似。在事件中,您有一个回调函数,在承诺中,您

我几年前就开始处理JavaScript了。所以我对术语“事件”很熟悉,它是当某个事件发生时自动执行的函数。如果我的定义有误,请纠正我

现在我必须再次处理语言问题。试着从这个对我来说很新鲜的承诺中得到一个想法。但是找不到任何好的定义

有人能给出一个简单易懂的JavaScript承诺定义吗

更多内容:在我看来,它们与事件非常相似。您定义了一个回调函数,该函数在某个事件发生时自动调用


JavaScript事件和-承诺之间有什么区别?

对于第一个视图,它们非常相似。在事件中,您有一个回调函数,在承诺中,您有一个回调函数。更严格地说,你可以做几乎与承诺只在活动中做的事情相似的事情

事件和承诺对于异步代码都很有用。我将写一些抽象代码来解释。例如,您有一些异步代码,在这之后,它应该发出一些警报

function someAsyncFunction() {
    setTimeout(function() {
        // some long async logic here
        console.log('What the hell is Promises?');
    }, 2000);
}
someAsyncFunction();
这里的超时是异步的,因为它将不在主线程中运行您的代码,并在一段时间后运行它,您不确定它确切发生的时间(当然,这里大约是2秒。更少或更多)

现在想象一下,您需要对异步操作的结果做一些事情。例如,您有函数
AsyncResultCalculator
,需要运行该函数。你会怎么做?你几乎没有选择:

  • 将回调函数传递给异步代码,并在异步代码完成工作后运行函数
    AsyncResultCalculator
  • 定义一些事件(例如“DoSomethingAfterAsync”事件),并在异步代码完成或失败后触发该事件
  • 使用承诺
因此,所有这些变体只会做一件事—运行函数
AsyncResultCalculator
。那么,为什么我们有三种不同的方法来实现相同的结果呢?因为它很酷!做同样的事情是不同的技术,但它们改变了代码的难度。有些方法使代码更复杂,有些方法使代码更大,有些方法使代码更优雅

所以,我认为您知道如何运行回调函数或如何触发事件,但承诺呢?如何使用它们?很简单。让我们回到异步超时并查看:

function AsyncResultCalculator(res) {
    // calculate result of async action!!!
    console.log(res + 1);
}

function someAsyncFunction() {
    return new Promise(function(resolve, reject) {
        setTimeout(function() {
            // some long async logic here
            resolve(55); // or reject
        }, 2000);
    }
}

someAsyncFunction().then(AsyncResultCalculator);
那么,在这里使用承诺有什么意义呢?只是因为它是异步操作的现代风格。有了承诺,您的代码将更加优雅,对于不同的开发人员来说更易于阅读。此外,承诺也很有用,因为您可以构建一系列功能,如

someAsyncFunction()
    .then(function(){ ... })
    .then(function(){ ... });
但是,当然,在某些情况下,使用回调或事件也不错。例如,如果您需要在某些不同的JS文件中捕获异步结果,并且不希望在原始文件中使用承诺或回调来执行异步操作,则事件更有用

所有JavaScript语言都是事件、回调和承诺的混合体;我会明智地使用它

  • 将事件用于DOM事件或某些复杂情况
  • 对异步操作使用承诺
  • 在同步操作或不希望使用承诺的情况下使用回调
最基本的承诺有点像事件监听器,除了:

  • 承诺只能成功或失败一次。它不能成功或失败两次,也不能从成功转换到失败,反之亦然
  • 如果承诺成功或失败,并且您稍后添加了成功/失败回调,则将调用正确的回调,即使事件发生在较早的时间

看看这个

你搜索了什么吗?谷歌给我的关于MDN的定义似乎很好:承诺用于延迟和异步计算/操作,表示尚未完成的操作,可以实际呈现不同的状态(挂起、完成和拒绝)(或者,实际上是挂起->等待、完全填充->成功、拒绝->错误)。相反,事件是表示dom触发的事件的接口,因此从技术上讲,它们是dom提供的属性,老实说,我无法真正预见承诺和事件之间的许多概念关系。@Rayon那么:事件有什么区别?@ts248,您如何将
承诺
事件
联系起来?我不知道你在问什么..:(