首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有没有一种方法可以在承诺实现时执行一些代码,而不依赖于结果?

有没有一种方法可以在承诺实现时执行一些代码,而不依赖于结果?
EN

Stack Overflow用户
提问于 2015-09-10 20:54:39
回答 2查看 41关注 0票数 0

在实现承诺时,我需要执行go()方法,即使有错误也是如此。(我正在与后端API交谈,当我得到服务器响应时,我需要做一些UI工作,即使是404)。

现在我这样做:

代码语言:javascript
运行
复制
Try.method().then(()=>{
  go();
}).catch({
  go();
})

有没有更好的方法来避免重复方法调用?

EN

回答 2

Stack Overflow用户

发布于 2015-09-10 20:56:44

有一个finally()回调,无论结果如何都会被调用:

代码语言:javascript
运行
复制
Try.method().then(()=>{
  go();
}).catch({
  go();
}).finally({
  go();
});

由于您使用的是似乎不支持finally()回调的babeljs,因此您可以使用下面的代码:

代码语言:javascript
运行
复制
Try.method().catch(()=>{
  go();
}).then({
  go();
})

如果存在错误,则首先捕获错误,否则将照常执行.then()

票数 2
EN

Stack Overflow用户

发布于 2015-09-10 21:08:23

有没有更好的方法来避免重复方法调用?

不确定是否正确地解释了上述问题部分?尝试定义一个链接到.then(go, go)调用末尾的单独api

代码语言:javascript
运行
复制
var go = function(data) {
  console.log("go", data)
};

var p = function(args, val) {
  return Promise[args](val)
};

p("resolve", 1).then(go, go);

p("reject", 0).then(go, go);

如果可以使用jQuery,可以尝试使用deferred.always()

代码语言:javascript
运行
复制
var go = function(data) {
  console.log("go", data)
};

var p = function(args, val) {
  return $.Deferred()[args](val)
};

p("resolve", 1).always(go);

p("reject", 0).always(go);
代码语言:javascript
运行
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js">
</script>

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

https://stackoverflow.com/questions/32502508

复制
相关文章

相似问题

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