重写这个弗兰肯斯坦承诺链
Rewriting this frankenstein promise chain
所以我把这个可憎的东西带到了生命中,我一生都无法弄清楚如何优化它,这样我就可以使用 Promise.all/Promise.join 正确运行这条链。
有人能为我指出正确的方向吗?应该先分开方法。
任何见解都值得赞赏。
getOpenIDConf: function() {
return client
.getAsync('openId')
.then(
function(result) {
if (!result) {
return request
.getAsync({
url: 'https://accounts.google.com/.well-known/openid-configuration',
json: true
}).spread(
function(response, body) {
var result = JSON
.stringify(body);
client.setAsync('openId',
result).then(
function() {
return result;
});
});
} else {
return result;
}
});
},
[编辑] 澄清一下,我正在使用蓝鸟
稍微
重构一下并更改代码样式就可以做到这一点。
getOpenIDConf: () => client.getAsync('openId').then(result =>
result || request.getAsync({
url: 'https://accounts.google.com/.well-known/openid-configuration',
json: true
}).get(1).then(JSON.stringify).then(result =>
client.setAsync('openId', result).return(result);
)
)
},
一个好的 promise 库(不确定你使用的是哪个库)的一些功能是你可以像这样链接承诺:
doSomething(function(result) {
return doSomethingElse();
}).then(function(result2) {
return doSomethingElseAgain();
}).then(function(result3) {
// It all worked!
}).catch(function() {
// Something went wrong
});
或者,您可以等待一组完成:
var promiseArray = [];
promiseArray.push(doSomething());
promiseArray.push(doSomethingElse());
promiseArray.push(doSomethingElseAgain());
Promise.all(promiseArray).then(function() {
// It all worked!
}).catch(function() {
// Something went wrong
});
希望这是有益的。
相关文章:
- 如何覆盖伊斯坦布尔的React jsx文件
- 将角度控制器添加到因果报应覆盖(伊斯坦布尔)代码覆盖预处理器
- 如何忽略伊斯坦布尔覆盖率报告中的函数_interopRequireDefault
- 忽略伊斯坦布尔覆盖率报告的对象方法
- 弗兰肯斯坦图像交换JavaScript需要整洁和可能的自动化
- 让伊斯坦布尔.js忽略定义(require.js)定义
- 伊斯坦布尔.js - 从源代码中删除装饰
- 茉莉花+伊斯坦布尔覆盖范围不起作用
- 重写这个弗兰肯斯坦承诺链
- 如何忽略伊斯坦布尔覆盖的node.js中所需的文件
- 伊斯坦布尔、isparta和ES6测试覆盖率
- Gulp Node.js伊斯坦布尔Isparta
- node.js伊斯坦布尔和茉莉花设置
- 伊斯坦布尔没有运行所有茉莉花规格
- 如何配置伊斯坦布尔覆盖率报告以排除某些来源
- 茶壶+摩卡+伊斯坦布尔报道
- 伊斯坦布尔为我提供了覆盖,但以错误结束输出
- 从Node访问伊斯坦布尔代码覆盖率信息
- 如何让伊斯坦布尔与Sails.js 0.10.x一起工作
- 如何使用正则表达式从伊斯坦布尔文本摘要报告中提取测试覆盖率?