JavaScript承诺,解决,拒绝

时间:2019-06-09 09:48:51

标签: javascript promise

所以我想知道响应和拒绝Promise对象是怎么回事。 我正在读这个documentation 有些事情对我来说还不清楚。

例如resolve()对象的全部含义。

我已经看到这东西可以放在字符串中,然后启动resolve()吗? 发生了什么,目的是什么

var promise1 = new Promise(function(resolve, reject) {
  setTimeout(function() {
    resolve('foo');
  }, 300);
});

我最初以为只要回调函数返回一个值,就启动resolve函数/对象 然后可以继续到.then()

所以我一直在玩这个东西有一段时间了,事实证明,我对回报有决心的理论在50%的时间里有效,而另外50%的时间让我崩溃了。

也是拒绝对象/函数,当我们说一个函数的结果为0但必须为1以便继续时,如何启动它?

var promise1 = new Promise(function(resolve, reject) {
   if(someFunction() === 0)
   {
     reject();
   } else {
     resolve()
   }
});

仅当我的someFunction()内部没有任何异步函数时,此代码才有效,而且当我具有任何异步函数时,它总是返回undefined。

到目前为止,对诺言的概念及其用法的了解对我来说还很不清楚。

1 个答案:

答案 0 :(得分:1)

您正确的事实是,只要回调函数返回一个值,就会启动resolve函数(哦,它们是functions)。

在您出现的情况下,该值返回了其“ foo”

即使它不是一个函数,就像有一个函数返回某些内容一样。 所以到目前为止,一切都很好。

当回调函数具有任何异步代码时,它不起作用的事实,只是因为正如您所说,它返回的是undefined。 该函数尚未完成运行,因此将其返回。 它不等待它。 我能想到的最简单的解决方案将解决您的两个问题,就是将resolve和reject对象传递给回调函数并从内部启动它们

例如

var promise1 = new Promise(function(resolve, reject) {
   someFunction(resolve,reject);
});

function someFunction(resolve,reject){
  var i = 0;
  setTimeout(function() {
    if(i===0){
      reject(/**You can even pass it some variables here if u wanted*/);
    } else {
      resolve(/**Same here*/); // this should work just fine and it will sucesfully launch .then with whatever u need returned 
    }
  }, 300);
}