Promise.resolve(null)

Promise.resolve() 它相当于创建了一个立即resolve的对象。如下两段代码作用相同:

Promise.resolve(5)

new Promise(function(resolve){
    resolve(5)
})

它使得promise对象直接resolve,并把5传到后面then添加的成功函数中。

Promise.resolve(5).then(function(value){
    console.log(value) // 5
})

官方说明

The Promise.resolve(value) method returns a Promise object that is resolved with the given value. If the value is a thenable (i.e. has a “then” method), the returned promise will “follow” that thenable, adopting its eventual state; if the value was a promise, that object becomes the result of the call to Promise.resolve; otherwise the returned promise will be fulfilled with the value.

he Promise.resolve(value)方法返回一个调用给定value的Promise对象
如果这个值是一个thenable(即有一个“then”方法),返回的promise将“follow”这个thenable,采用它最终状态;
如果这个值是一个promise,那么对象就变为Promise.resolve调用的结果;
否则返回的promise将用value填满

var promise1 = Promise.resolve([1, 2, 3]);

promise1.then(function(value) {
  console.log(value);
  // expected output: Array [1, 2, 3]
});

Promise.resolve方法有下面三种形式:

Promise.resolve(value);
Promise.resolve(promise);
Promise.resolve(theanable);
这三种形式都会产生一个新的Promise。其中:

第一种形式提供了自定义Promise的值的能力,它与Promise.reject(reason)对应。两者的不同,在于得到的Promise的状态不同。

第二种形式,提供了创建一个Promise的副本的能力。

第三种形式,是将一个类似Promise的对象转换成一个真正的Promise对象。它的一个重要作用是将一个其他实现的Promise对象封装成一个当前实现的Promise对象。例如你正在用bluebird,但是现在有一个Q的Promise,那么你可以通过此方法把Q的Promise变成一个bluebird的Promise。

实际上第二种形式可以归在第三种形式中。


Promise.resolve(value)

Sometimes you already have a value and you want to convert it into a promise. You may also sometimes find yourself with a value that may or may not be a promise. Finally you might find you have a value that is a promise but does not work as it should (e.g. a jQuery promise) and want to convert it into a true promise.
有时你已经有了一个value,你想把它转换成一个promise。
有时你发现本身带一个不知道是不是promise的value。
最后你可能发现你有一个value是promise,但是他可能是jquery promise,希望它转换为一个真正的promise

var value = 10;
var promiseForValue = Promise.resolve(value);
// equivalent to 相当于
var promiseForValue = new Promise(function (fulfill) {
  fulfill(value);
});
var jQueryPromise = $.ajax('/ajax-endpoint');
var realPromise = Promise.resolve(jQueryPromise);
// equivalent to
var realPromise = new Promise(function (fulfill, reject) {
  jQueryPromise.then(fulfill, reject);
});
var maybePromise = Math.random() > 0.5 ? 10 : Promise.resolve(10);
var definitelyPromise = Promise.resolve(maybePromise);
// equivalent to
var definitelyPromise = new Promise(function (fulfill, reject) {
  if (isPromise(maybePromise)) {
    maybePromise.then(fulfill, reject);
  } else {
    fulfill(maybePromise);
  }
});

ngxbootstrap源码中

@Input()
  get isOpen(): boolean {
    return this._isOpen;
  }

  set isOpen(value: boolean) {
    if (value !== this.isOpen) {
      if (value) {
        this.accordion.closeOtherPanels(this);
      }
      this._isOpen = value;
      Promise.resolve(null).then(() => {
        this.isOpenChange.emit(value);
      });
    }
  }

var foo = {
then: (resolve, reject) => resolve(‘foo’)
};
var resolved = Promise.resolve(foo);
相当于
var resolved = new Promise((resolve, reject) => {
foo.then(resolve, reject)
});

resolved.then((str) =>
console.log(str);//foo
)


var promise1 = new Promise(function(resolve){
    resolve(2);
});
promise1.then(function(value){
    return value * 2;
}).then(function(value){
    return value * 2;
}).then(function(value){
    console.log("1"+value);
});

打印出18,即 “1” + 2*2*2 = 18;

此方式是使用方法链的then,使多个then方法连接在一起了,因此函数会严格执行 resolve – then — then – then的顺序执行,并且传递每个then方法的value的值都是前一个promise对象中return的值;因此最后的结果就是18了;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值