当前位置: 首页 > 知识库问答 >
问题:

JavaScriptpromise、解决、拒绝

孔彭祖
2023-03-14

所以我想知道promise的回应和拒绝对象是怎么回事。我正在阅读这份文档,有些事情我还不清楚。

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

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

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

我最初认为只要回调函数返回一个值,解析函数/对象就会启动,然后它就可以转到.then()

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

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

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

此代码仅在我的某物Function()中没有任何异步函数时工作,并且当我有任何异步函数时,它总是返回未定义的。

所以到目前为止,promise的概念和它的使用对我来说还很不清楚。

共有1个答案

松秦斩
2023-03-14

你是对的,当回调函数返回一个值时,解析函数(哦,它们是函数)就会启动。

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

即使它不是一个函数,它也相当于让一个函数返回一些东西。所以到那时一切都很好。

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

举个例子

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);
}
 类似资料:
  • 我在测试中到处使用这种模式(不仅仅是加载URL),主要是为了允许发生对DOM的更改(例如mimick单击按钮,并等待divs隐藏和显示)。 这种设计的缺点是,我总是用几行代码编写匿名函数。此外,虽然我有一个解决方案(QUnit的),但定义promise的测试函数在promise运行之前完成。 我想知道是否有任何方法可以从中获取值,或者等待(block/sleep)直到它解决为止,类似于.NET的。

  • 我在想什么时候我该拒绝一个promise。我发现了几个关于这个话题的问题,但找不到合适的答案。我什么时候应该拒绝promise? 本文http://howtonode.org/6666a4b74d7434144cff717c828be2c3953d46e7/promises 说: 解析:一个成功的promise是“已解析”的,它调用正在等待的成功侦听器,并记住为附加的未来成功侦听器解析的值。分辨率

  • 当我运行:时,存在这样的错误: 有人可以帮助我吗?

  • 我正在为如何处理这个特殊案件而挣扎。我知道我可以通过链式回调来解决这个问题,但它看起来就像是promise的海报: 我有一个父方法,它需要按顺序执行三个异步操作(特别是从用户那里得到确认)。我们称它们为func1 func2和func3。现在,我可以让每一个都返回一个promise,并将其链接起来,这一切都非常有效。我遇到的问题是: func1需要设置一个状态,等待链的其余部分运行,然后取消设置该

  • 问题内容: 假设我有以下代码。 如果我的目的是要早退,那么我是否也应该养成事后立即饮食的习惯? 问题答案: 的目的是拒绝后终止函数的执行,防止代码执行后它。 在这种情况下,它会阻止执行,这不是严格需要的。但是,仍然最好终止执行以防止将来可能出现陷阱。另外,防止不必要地运行代码是一个好习惯。 背景 一个承诺可以处于以下三种状态之一: 待定-初始状态。从待定状态可以移至其他状态之一 完成-成功运作 拒

  • 假设我有以下代码。 如果我的目标是使用提前退出,那么我是否也应该养成之后立即返回ing的习惯?