我正在尝试使用 ecma6 Promise 重写该 simpel $.when
var d1 = $.Deferred();
var d2 = $.Deferred();
$.when( d1, d2 ).done(function ( v1, v2 ) {
console.log( v1 ); // "Fish"
console.log( v2 ); // "Pizza"
});
d1.resolve( "Fish" );
d2.resolve( "Pizza" );
有什么方法可以使用新的 Promise 吗?
问候
目标是在 promise 范围之外解决 promise 。
最佳答案
根据您的需要,Promise 可以通过多种方式编写,因此这 3 个示例应该与您的 jQuery 示例接近:
var d1 = (v)=>new Promise(r=>r(v))
var d2 = (v)=>new Promise(r=>r(v))
var dd1 = d1('Fish')
var dd2 = d2('Pizza')
Promise.all([dd1, dd2]).then(( v )=>{
console.log( v[0]+', '+v[1] );
});
//or
var d1 = new Promise(r=>r('Fish'))
var d2 = new Promise(r=>r('Pizza'))
Promise.all([d1, d2]).then(( v )=>{
console.log( v[0]+', '+v[1] );
});
//or
var d1 = Promise.resolve('Fish')
var d2 = Promise.resolve('Pizza')
Promise.all([d1, d2]).then(( v )=>{
console.log( v[0]+', '+v[1] );
});
好的,下面是如何从外部解决它:
var reolveMe = [];
var d1 = new Promise(r=>reolveMe.push(r))
var d2 = new Promise(r=>reolveMe.push(r))
Promise.all([d1, d2]).then(( v )=>{
console.log( v[0]+', '+v[1] );
});
reolveMe[0]('a')
reolveMe[1]('b')
//or more OOP
function myPromise() {
var myResolve;
this.promise = new Promise(r=>myResolve=r)
this.resolve = myResolve;
}
var d1 = new myPromise()
var d2 = new myPromise()
Promise.all([d1.promise, d2.promise]).then(( v )=>{
console.log( v[0]+', '+v[1] );
});
d1.resolve('a')
d2.resolve('b')
关于javascript - Ecma6 promise : how to use Ecma6 promise to rewrite jquery $. 什么时候?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44264713/