Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/457.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript承诺、解决、拒绝_Javascript_Promise - Fatal编程技术网

JavaScript承诺、解决、拒绝

JavaScript承诺、解决、拒绝,javascript,promise,Javascript,Promise,所以我想知道承诺的回应和拒绝对象是怎么回事。 我在读这个 有些事情我还不清楚 例如,resolve()对象是关于什么的 我已经看到这个东西可以包含在一个字符串中,然后启动resolve()? 发生了什么事?这有什么意义 var promise1 = new Promise(function(resolve, reject) { setTimeout(function() { resolve('foo'); }, 300); }); 我最初认为只要回调函数返回一个值,就会启动re

所以我想知道承诺的回应和拒绝对象是怎么回事。 我在读这个 有些事情我还不清楚

例如,
resolve()
对象是关于什么的

我已经看到这个东西可以包含在一个字符串中,然后启动
resolve()
? 发生了什么事?这有什么意义

var promise1 = new Promise(function(resolve, reject) {
  setTimeout(function() {
    resolve('foo');
  }, 300);
});
我最初认为只要回调函数返回一个值,就会启动resolve函数/对象 然后它可以转到
。然后()

所以我在这件事上玩了一段时间,结果证明,我的理论中有50%的时间是有效的,另外50%的时间让我崩溃

还有拒绝对象/函数,如果一个函数的结果是0,但它必须是1,那么我如何启动它才能继续

var promise1 = new Promise(function(resolve, reject) {
   if(someFunction() === 0)
   {
     reject();
   } else {
     resolve()
   }
});
这段代码只有在我的
someFunction()
中没有任何异步函数时才起作用,而且当我有异步函数时,它总是返回未定义的


因此,到目前为止,promise的概念及其用法对我来说还不清楚。

你说得对,只要回调函数返回一个值,解析函数(哦,它们是函数)就会启动

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

即使它不是一个函数,而是一个函数返回了一些东西。 所以在这一点上,一切都是好的

当回调函数包含任何异步代码时,它都不起作用,这是因为正如您所说的,它返回未定义的代码。 函数尚未完成运行,因此返回该值。 它不等待它。 我能想到的解决这两个问题的最简单的解决方案是将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);
}

如果在
newpromise((resolve,reject)=>…)
中调用
resolve('some value')
,它会将
'some value'
传递到
回调函数中。然后()。如果您调用
reject('some error')
它也会这样做,但是对于
.catch()
回调,它不会调用
。然后()
只要
someFunction()
是异步的,您就需要使用
If(wait someFunction())
和promise param函数也应该是异步的。
resolve
reject
都是函数,而不仅仅是对象。“我最初认为只要回调函数返回值,
resolve
函数[…]就会启动,然后它就可以转到
。然后()
” — “回调函数”是指
新承诺(
..
中的函数吗?
返回是前进到
的一种方法。然后是
,但有时是不可能返回的(例如,嵌套的基于事件的函数);这时使用了
解析
。@George”,并且不会调用
。then()
“ — 
然后
接受两个参数。如果出现错误,将调用第二个参数。我发现这个博客很有用