javascript - Ecma6 promise : how to use Ecma6 promise to rewrite jquery $. 什么时候?

标签 javascript jquery ecmascript-6

我正在尝试使用 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/

相关文章:

javascript - WP5 模块联合 : remoteEntry. js 缓存

javascript - 使用 for 和 if 语句隐藏/显示多个图像的迭代函数

javascript - 第二次单击按钮

javascript - 基于 bool 值排除对象的属性

javascript - 根据多个条件对数组中的项目进行排序

javascript - 如何在c#中的wpf webbrowser控件中注入(inject)js文件

javascript - Angular 新手: non-trivial form validation?

javascript - 未捕获的语法错误 : Failed to execute 'querySelector' on 'Document'

javascript - 当光标位于拉斐尔中的另一个图像上时,如何防止鼠标悬停事件在图像上失去焦点?

javascript - React 组件的 ESLint 规则 : Method Render expected no return value