Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Jquery .when().then()或只是直接调用函数。有什么不同吗?

Jquery .when().then()或只是直接调用函数。有什么不同吗?
EN

Stack Overflow用户
提问于 2014-07-30 15:44:12
回答 2查看 75关注 0票数 0

我正在做一些编码,我偶然发现我不需要当().then()时,而是好奇它在这种情况下是否有用.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var someObj = function(){

  var k = {
     a: function(){ 
           // do something 
     },
     b: function(){ 
        // do something
     },
     c: function(){ 
       // do something
     },

     dolast: function(){
        // something that needs to happen last
     }
 }
 return k;

}();

因此,由于我希望dolast()最后触发,所以我想要这样做:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
jQuery.when(
        (function(){
           someObj.a();
           someObj.b();
           someObj.c();
          })() 
        ).then(
          someObj.dolast();
        )

它所做的与此完全相同:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   someObj.a();
   someObj.b();
   someObj.c();
   someObj.dolast();

当我抚慰出值之类的。因此,如果我的函数中没有一个返回承诺,那么使用时/然后或?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-30 16:12:17

如果您的代码是100%同步的,则没有理由在一般情况下使用承诺或jQuery.when()。这样做只会使事情变得比要求的复杂和缓慢得多。

如果您想在一行中一个接一个地执行四个同步函数,只需这样调用它们。Javascript将执行第一个,当它返回时,执行第二个等等。

所以这个:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
someObj.a();
someObj.b();
someObj.c();
someObj.dolast();

是一种非常精细和简单的方法,可以一个接一个地按照规定的顺序执行您的四个方法。Javascript依次执行语句。

现在,如果这些方法中的一个或多个触发了一些异步的东西(比如ajax调用),并且该方法返回了一个承诺,并且您希望在未来某个时候对ajax调用完成时对其他事情进行排序,那么您就需要一些东西,比如承诺,或者是jQuery.when()。但是,对于100%的同步代码,没有必要通过使用承诺来使事情复杂化。

如果这些方法中的每一个都返回一个成功/错误代码(假设0是成功的),并且您只希望在它们成功的情况下继续执行其他方法,那么您可以这样做:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function runSequence(obj) {
     var err;
     if ((err = obj.a()) !== 0) return err;
     if ((err = obj.b()) !== 0) return err;
     if ((err = obj.c()) !== 0) return err;
     return obj.doLast();
}

或者,如果编写方法代码以在方法失败时抛出异常,则可以这样做:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function runSequence(obj) {
    try {
        someObj.a();
        someObj.b();
        someObj.c();
        someObj.dolast();
        return 0;
    } catch(e) {
        return e;
    }
}

或者,使用数据驱动的方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function runSequence(obj, arrayOfMethods) {
    var err;
    for (var i = 0; i < arrayOfMethods.length; i++) {
        err = obj[arrayOfMethods[i]]();
        if (err !== 0) return err;
    }
    return 0;
}

runSequence(someObj, ["a", "b", "c", "doLast"]);
票数 1
EN

Stack Overflow用户

发布于 2014-07-30 16:02:39

不,如果这里不使用延迟特性,并且需要按特定顺序调用一些函数,那么就这样做吧。代码过于复杂会降低其可维护性。保持简单

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

https://stackoverflow.com/questions/25048766

复制
相关文章
spark读取多个文件夹(嵌套)下的多个文件
在正常调用过程中,难免需要对多个文件夹下的多个文件进行读取,然而之前只是明确了spark具备读取多个文件的能力。
sparkexpert
2022/05/07
3.2K0
matlab处理多个文件夹中的image,保存为mat格式。
train = cell(11400, 1); label = zeros(11400, 1); dis1 = dir(['E:\Adesk\Cpp-Primer\PCANet\PCANet\datas\train\' '.']); nms1 = {dis1.name}; i=0; for m = 1:length(nms1)     nm1 = ['E:\Adesk\Cpp-Primer\PCANet\PCANet\datas\train\' nms1{m}];     dis2 = dir([nm1 '
MachineLP
2022/05/09
1.1K0
Java中多个异常的捕获顺序(多个catch)
import java.io.IOException;   public class ExceptionTryCatchTest {       public void doSomething() throws IOException{           System.out.println("do somthing");       }       public static void main(String[] args){           ExceptionTryCatchTest etct = new ExceptionTryCatchTest();           try {               etct.doSomething();           } catch (Exception e) {                          } catch (IOException e) {                          }       }      }
用户7886150
2021/04/25
3.8K0
使用Python和OpenCV检测图像中的多个亮点
本文来自光头哥哥的博客【Detecting multiple bright spots in an image with Python and OpenCV】,仅做学习分享。
周旋
2020/10/23
4.1K0
使用Python和OpenCV检测图像中的多个亮点
在pycharm中如何将django中多个app放到同个文件夹apps处理
新建apps文件夹后mark为source目录,然后在Setting中import方式为
Ewdager
2020/07/14
2K0
在MapReduce中利用MultipleOutputs输出多个文件
用户在使用Mapreduce时默认以part-*命名,MultipleOutputs可以将不同的键值对输出到用户自定义的不同的文件中。
星哥玩云
2022/07/03
2.1K0
在MapReduce中利用MultipleOutputs输出多个文件
python中多个if语句用法_python中if函数多个条件怎么用
1.只有 if 进行判断desserts = [‘ice cream’, ‘chocolate’, ‘apple crisp’, ‘cookies’]
全栈程序员站长
2022/11/09
4.4K0
Centos8中如何更改文件夹中多个文件的扩展名
在目录中递归更改文件扩展名的最常见方法是使用 shell 的 for 循环。我们可以使用 shell 脚本提示用户输入目标目录、旧的扩展名和新的扩展名以进行重命名。以下是脚本内容:
用户7639835
2021/09/01
3.7K0
图像处理中C++如何同时返回多个值
1 . pair<T,T> 返回两个值 //返回两个值的情况 pair<vector<double>,int> R_R(Mat& img) { int n=img.rows; vector<double> a; unsigned int m=img.cols; unsigned int k=img.rows; for(unsigned int i=0;i<m;i++) { for(unsigned int j=0;j<k;j++)
用户9831583
2022/06/16
7960
Centos8中如何更改文件夹中多个文件的扩展名
在目录中递归更改文件扩展名的最常见方法是使用 shell 的 for 循环。我们可以使用 shell 脚本提示用户输入目标目录、旧的扩展名和新的扩展名以进行重命名。以下是脚本内容:
用户9236362
2021/11/30
4K0
Centos8中如何更改文件夹中多个文件的扩展名
在目录中递归更改文件扩展名的最常见方法是使用 shell 的 for 循环。我们可以使用 shell  提示用户输入目标目录、旧的扩展名和新的扩展名以进行重命名。以下是 内容:
用户1685462
2021/09/05
3.3K0
15. 在错误分析中并行多个想法
你的团队有以下几个想法,来改进你的猫咪分类器: • 解决狗被错误分为猫咪的问题。 • 解决“大型猫科动物(greast cats)”(狮子或豹子等)被错认家猫(宠物)的问题 • 提高系统在模糊(
YingJoy_
2018/05/30
1.3K0
在Ubuntu 系统中怎么切换多个 PHP 版本
有时,最新版本的安装包可能无法按预期工作。你的程序可能与更新的软件包不兼容,并且仅支持特定的旧版软件包。在这种情况下,你可以立即将有问题的软件包降级到其早期的工作版本。请参阅我们的旧指南,在这了解如何降级 Ubuntu 及其衍生版中的软件包以及在这了解如何降级 Arch Linux 及其衍生版中的软件包。但是,你无需降级某些软件包。我们可以同时使用多个版本。例如,假设你在测试部署在 Ubuntu 18.04 LTS 中的LAMP 栈的 PHP 程序。过了一段时间,你发现应用程序在 PHP 5.6 中工作正常,但在 PHP 7.2 中不正常(Ubuntu 18.04 LTS 默认安装 PHP 7.x)。你打算重新安装 PHP 或整个 LAMP 栈吗?但是没有必要。你甚至不必将 PHP 降级到其早期版本。在这个简短的教程中,我将向你展示如何在 Ubuntu 18.04 LTS 中切换多个 PHP 版本。它没你想的那么难。请继续阅读。
会长君
2023/04/25
2.5K0
网页中多个盒子的设置
在网页排版时,通常会将网页分成几个部分,这就需要将网页分成一个个的盒子。探讨网页中多个盒子的设置。
算法与编程之美
2021/11/23
2.1K0
15. 在错误分析中并行多个想法
你的团队有以下几个想法,来改进你的猫咪分类器: • 解决狗被错误分为猫咪的问题。 • 解决“大型猫科动物(greast cats)”(狮子或豹子等)被错认家猫(宠物)的问题 • 提高系统在模糊(Blurry)图像上的表现 • … 你可以并行并且有效的评估这些想法。我通常会创建一个表格,查看100个分类错误的开发集样本并记录在表格上,同时进行注释。用有小开发集里的4个错误分类样本来说明这个过程,你的表格大概将会是下面的样子:
YingJoy_
2018/05/09
2.9K2
15. 在错误分析中并行多个想法
python中处理多个异常
我们把多个明确的异常归类到一起,用同一种方式来进行处理。我们把多个异常写到同一个except中用小括号括起来,中间的异常用逗号隔开。
刘金玉编程
2019/09/19
4.2K0
java中类中多个Synchronized方法
下面给出一个例子,说明一个class中有两个方法synchronized的情况。它们互相阻挡的用法和上面的“一个方法有synchronized”的情况是一样的。
马克java社区
2021/04/23
9070
java中类中多个Synchronized方法
Spring读取mybatis在多个jar包下的的mapper文件
刚开始的时候我的配置文件在同名目录下都是在/mapper下,导致只能读取一个jar中的mapper文件。先解决如下: 1.将mapper文件放在不能放在同名的目录下。        比如:user.jar放在/user下,common.jar放在common下 2.在Spring中配置  (记住:classpath后跟*号) <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">     <property name="mapperLocations">        <array>            <value>classpath*:user/*.xml</value>            <value>classpath*:common/*.xml</value>        </array>     </property>
似水的流年
2019/12/06
1.9K0
python 中迭代多个序列
http://blog.csdn.net/he_jian1/article/details/40819407
bear_fish
2018/09/20
8670
点击加载更多

相似问题

Server日期时间到日期时间字符串列

11

Datatable Compute方法将字符串列转换为日期

20

清理熊猫日期时间字符串列

11

将日期时间的字符串列表转换为日期时间

22

在DataTable中按日期对字符串列进行排序

45
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文