bad*_*unk 122 javascript promise
我在这里遵循规范,我不确定它是否允许使用多个参数调用onFulfilled.例如:
promise = new Promise(function(onFulfilled, onRejected){
onFulfilled('arg1', 'arg2');
})
Run Code Online (Sandbox Code Playgroud)
这样我的代码:
promise.then(function(arg1, arg2){
// ....
});
Run Code Online (Sandbox Code Playgroud)
会收到arg1和arg2?
我不关心任何具体的承诺如何实现它,我希望密切关注w3c规范的承诺.
Ben*_*aum 123
我在这里遵循规范,我不确定它是否允许使用多个参数调用onFulfilled.
不,只是第一个参数将被视为promise构造函数中的分辨率值.您可以使用复合值(如对象或数组)进行解析.
我不关心任何具体的承诺如何实现它,我希望密切关注w3c规范的承诺.
那就是我认为你错了.该规范旨在最小化,并构建用于promise库之间的互操作.我们的想法是拥有一个子集,例如DOM期货可以可靠地使用并且库可以消耗.承诺实现现在做你要求.spread的一段时间.例如:
Promise.try(function(){
return ["Hello","World","!"];
}).spread(function(a,b,c){
console.log(a,b+c); // "Hello World!";
});
Run Code Online (Sandbox Code Playgroud)
与蓝鸟.如果您想要此功能,一种解决方案是将其填充.
if (!Promise.prototype.spread) {
Promise.prototype.spread = function (fn) {
return this.then(function (args) {
return Promise.all(args); // wait for all
}).then(function(args){
//this is always undefined in A+ complaint, but just in case
return fn.apply(this, args);
});
};
}
Run Code Online (Sandbox Code Playgroud)
这可以让你做到:
Promise.resolve(null).then(function(){
return ["Hello","World","!"];
}).spread(function(a,b,c){
console.log(a,b+c);
});
Run Code Online (Sandbox Code Playgroud)
本土承诺轻松小提琴.或者在浏览器中使用现在(2018)常见的传播:
Promise.resolve(["Hello","World","!"]).then(([a,b,c]) => {
console.log(a,b+c);
});
Run Code Online (Sandbox Code Playgroud)
或等待:
let [a, b, c] = await Promise.resolve(['hello', 'world', '!']);
Run Code Online (Sandbox Code Playgroud)
Woo*_*iem 61
你可以使用E6解构:
对象解构:
promise = new Promise(function(onFulfilled, onRejected){
onFulfilled({arg1: value1, arg2: value2});
})
promise.then(({arg1, arg2}) => {
// ....
});
Run Code Online (Sandbox Code Playgroud)
数组解构:
promise = new Promise(function(onFulfilled, onRejected){
onFulfilled([value1, value2]);
})
promise.then(([arg1, arg2]) => {
// ....
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
95094 次 |
| 最近记录: |