首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JavaScript回调风格-移动到承诺

JavaScript回调风格-移动到承诺
EN

Stack Overflow用户
提问于 2013-07-12 10:48:10
回答 3查看 184关注 0票数 4

我正试图找出如何以不同的方式进行JavaScript回调。

我当前的回调样式,将回调传递给函数,然后函数调用回调。例如:

函数调用

代码语言:javascript
运行
复制
doSomething(function(data){
   console.log(data);
});

函数

代码语言:javascript
运行
复制
function doSomething(callback) {
    // Call the callback
    callback("someData");
}

这是我正在使用的当前回调样式。但是我已经看到了以不同的方式进行回调的库。例如:

函数调用

代码语言:javascript
运行
复制
doSomething().success(function(data){
   console.log(data);
});

这是如何工作的,谁能为我概述一个简单的例子吗?耽误您时间,实在对不起。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-07-12 10:49:30

这是承诺库的实现。jQuery有一个叫做延迟的实现,另一个是问:

doSomething看起来像这样,使用jQuery。

代码语言:javascript
运行
复制
function doSomething() {
   var dfd = $.deferred();
   // do your logic
   // eventually call dfd.resolve();
   return dfd.promise();
}

那就叫它,用

代码语言:javascript
运行
复制
doSomething().then(function() {
   // do something else
});

这个模式的好处是,您可以有多个回调和错误回调。

票数 4
EN

Stack Overflow用户

发布于 2013-07-12 10:57:41

你所描述的风格通常被称为承诺。jQuery有承诺,但他们的文档称它们为"Deferreds“,这是承诺/A规范的一个实现;还有其他几个承诺库,包括问:。(YUI还包含一个承诺实现。)

最近(2013年年中)有一堆关于承诺的博客文章,所以应该很容易找到更多关于承诺的信息,无论是作为一种模式还是关于具体的实现。值得深入研究几个实现的源代码,以了解具体细节,但在高层,您可以想到这样的承诺:

  • 您可以将异步函数封装在一个承诺中,然后调用它。
  • 然后返回允诺本身,这意味着您可以将对它的引用保存在变量中。
  • 当您调用的异步函数完成时,承诺本身将得到解决(或“实现”)。
  • 然后,您可以对已解析的承诺调用done,将回调函数作为参数传递给done
票数 3
EN

Stack Overflow用户

发布于 2013-07-12 10:54:39

这里不是很简单吗?

函数

代码语言:javascript
运行
复制
doSomething = new Object();

doSomething.success = function(callback) {
    // Call the callback
    callback("someData");
}

因此,它只是一个用成员“成功”扩展的对象,这是一个函数。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17613225

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档