是否可以在承诺中简化承诺解决?
Is it possible to simplify promise resolve inside a promise?
我找到了一种异步加载模块的方法,但结果看起来有点吓人。
export default Promise.all([
// asynchronously load modules:
System.import('./details.js'),
System.import('./chartHelper.js'),
System.import('./dateHelper.js')
]).then(promises => {
// modules returned promises, so resolve them:
Promise.all([
promises[0].default,
promises[1].default,
promises[2].default
]).then(modules => {
// assign modules to variables:
var details = modules[0];
var chartHelper = modules[1];
var dateHelper = modules[2];
/* ...code dependent on loaded modules... */
});
});
有什么方法可以简化这个吗?
例如,如果原始 promise 的响应也是 promise,是否有合成糖来解决 promise 的结果?或者我至少可以在这里使用命名属性而不是数组索引吗?
这算不算简单?
export default Promise.all([
// asynchronously load modules:
System.import('./details.js'),
System.import('./chartHelper.js'),
System.import('./dateHelper.js')
]).then(promises =>
Promise.all(promises.map(promise => promise.default))
).then([details, chartHelper, dateHelper] => {
/* ...code dependent on loaded modules... */
});
(顺便说一句,你有一个小错误:你实际上并没有从第二个 Promise.all()
返回值。)
您可以通过类似的方式提高可读性:
export default Promise
.all(
['details', 'chartHelper', 'dateHelper']
.map(m => (
System.import(`./${m}.js`).then(m => m.default)
))
)
.then(([details, chartHelper, dateHelper]) => {
console.log({details, chartHelper, dateHelper});
})
;
我找到了一种异步加载模块的方法,但结果看起来有点吓人。
export default Promise.all([
// asynchronously load modules:
System.import('./details.js'),
System.import('./chartHelper.js'),
System.import('./dateHelper.js')
]).then(promises => {
// modules returned promises, so resolve them:
Promise.all([
promises[0].default,
promises[1].default,
promises[2].default
]).then(modules => {
// assign modules to variables:
var details = modules[0];
var chartHelper = modules[1];
var dateHelper = modules[2];
/* ...code dependent on loaded modules... */
});
});
有什么方法可以简化这个吗?
例如,如果原始 promise 的响应也是 promise,是否有合成糖来解决 promise 的结果?或者我至少可以在这里使用命名属性而不是数组索引吗?
这算不算简单?
export default Promise.all([
// asynchronously load modules:
System.import('./details.js'),
System.import('./chartHelper.js'),
System.import('./dateHelper.js')
]).then(promises =>
Promise.all(promises.map(promise => promise.default))
).then([details, chartHelper, dateHelper] => {
/* ...code dependent on loaded modules... */
});
(顺便说一句,你有一个小错误:你实际上并没有从第二个 Promise.all()
返回值。)
您可以通过类似的方式提高可读性:
export default Promise
.all(
['details', 'chartHelper', 'dateHelper']
.map(m => (
System.import(`./${m}.js`).then(m => m.default)
))
)
.then(([details, chartHelper, dateHelper]) => {
console.log({details, chartHelper, dateHelper});
})
;