如何创建一个承诺树
How to create a tree of promises?
我正在尝试在Ember中创建一个承诺树。
return this.store.find('session', 'session').then(function(session) {
if (session.get('isEmpty')) {
return this.store.createRecord('session').save().then(function(session) {
session.set('id', 'session');
return session.save();
}.bind(this));
} else {
return session;
}
}.bind(this), function(session) {
return this.store.createRecord('session').save().then(function(session) {
session.set('id', 'session');
return session.save();
}.bind(this));
}.bind(this)).then(function(session) {
this.controllerFor('application').onLanguageChange();
this.set('localStorage.session', session);
return session;
}.bind(this));
我想执行如下所示的承诺。提到还有嵌套的承诺createRecord(..).save().then
。这可能吗?
这里并不是一个承诺树,因为最后一个应该在两个分支中执行。当然,如果我把它们放到一个单独的函数中。像这样:
'successBranch'.then(function(session) {
setSessionDependents(session);
return session;
}
'failBranch'.then(function(session) {
setSessionDependents(session);
return session;
}
function setSessionDependents(session) {
this.controllerFor('application').onLanguageChange();
this.set('localStorage.session', session);
}
最后一个应该在两个分支中执行
确实有!如果错误处理程序没有throw
异常,则错误已被处理,并且承诺确实通过处理程序的return
值解决。
这可能吗?
是的!这是then
的核心属性之一,它通过嵌套的承诺来解决。
但是,你可以稍微简化一下你的代码,因为你有很多重复的地方:
return this.store.find('session', 'session').then(function(session) {
if (session.get('isEmpty')) {
throw new Error("no session found");
else
return session;
}).then(null, function(err) {
return this.store.createRecord('session').save().then(function(session) {
session.set('id', 'session');
return session.save();
});
}.bind(this)).then(function(session) {
this.controllerFor('application').onLanguageChange();
this.set('localStorage.session', session);
return session;
}.bind(this));
相关文章:
- 一个承诺换多个承诺-并发问题
- 从上一个日期创建日期并添加到该日期
- WinJS,从可能是异步的函数返回一个承诺,也可能不是异步的
- 在jQuery中,.state()如何确定一个承诺是挂起的、已解决的还是被拒绝的
- 转换嵌套'对于'循环成一个承诺,为了一个承诺?嵌套承诺
- 使用javascript中的另一个dict创建dict时出现意外的令牌
- 我正在尝试为一个网站创建一个文本框,可以将文本更改为用户希望的任何格式
- 如何通过Bluebird承诺您自己的javascript api,该api使用另一个承诺的api
- jasmine 2.0测试angularjs的工厂方法,这是一个承诺
- 从另一个函数创建变量到 JavaScript 数组
- 在Javascript中,有没有一种方法可以用一个语句创建一个索引对象数组
- 做一些 ajax 并使用 getJSON 返回一个承诺
- 我可以创建一个承诺来检查变量是否设置为角度吗?
- 在这种情况下,我将如何使用 javascript 创建一个承诺函数
- 创建一个Q承诺并稍后调用它
- 我应该在等待事件启动时明确创建一个承诺吗
- 在Angular应用的路由中的resolve中创建一个承诺
- 如何创建一个承诺树
- 创建一个承诺,使用angular factory从firebase访问多个数据点
- 定义一个承诺,创建一个新的Service Object