以下两者之间的区别是什么:
new Promise(function(res, rej) {
res("aaa");
})
.then(function(result) {
return "bbb";
})
.then(function(result) {
console.log(result);
});
这是:
new Promise(function(res, rej) {
res("aaa");
})
.then(function(result) {
return Promise.resolve("bbb");
})
.then(function(result) {
console.log(result);
});
我问,因为我得到不同的行为使用Angular和$超文本传输协议服务与链接。代码有点太多,因此首先是上面的例子。
您的两个示例的行为应该大致相同。
在然后()
处理程序中返回的值将成为从该然后()
返回的promise的解析值。如果内返回的值是一个promise,那么由
返回的promise()
将采用该promise的状态,并像返回的promise一样解决/拒绝。
在第一个示例中,在第一个
然后()
处理程序中返回"bbb"
,因此"bbb"
被传递到下一个然后()
处理程序中。
在第二个示例中,返回一个立即用值
"bbb"
解析的promise,因此"bbb"
被传递到下一个然后()
处理程序。(这里的Promise.resolve()
是无关的)。
结果是一样的。
如果你能给我们展示一个实际表现出不同行为的例子,我们可以告诉你为什么会发生这种情况。
规则是,如果中的函数返回一个值,那么
处理程序将用该值解析/拒绝promise,如果函数返回一个promise,那么下一个子句将是
然后函数返回的promise的
子句,所以,在这种情况下,第一个例子落入然后
的正常序列,并打印出人们可能期望的值,在第二个例子中,当你做的Promise.resolve("bbb")
's然后是在链接时被调用的然后
(出于所有意图和目的)。它实际工作的方式将在下面更详细地描述。
引用promise/A规范:
promise解析过程是一个抽象操作,将promise和值作为输入,我们将其表示为
[[Resolve]](promise,x)
。如果x
是一个thable,它试图使promise采用x
的状态,假设x的行为至少有点像promise。否则,它将使用值x
来实现promise。
这种对表的处理允许promise实现进行互操作,只要它们公开符合Promises/a的then方法。它还允许Promises/A实现使用合理的方法“同化”不一致的实现。
这里要注意的关键是这一行:
如果
x
是promise,则采用其状态[3.4]
链接:https://promisesaplus.com/#point-49
简单来说,在然后
处理程序函数中:
A) 当
x
是一个值(数字、字符串等)时:
return x
相当于退货promise。解析(x)
throw x
相当于退货promise。拒绝(x)
B) 当
x
是已结算的promise(不再待定)时:
return x
相当于return Promise.resolve(x)
,前提是promise已经解决。
C) 当
x
是待定的promise时:
返回x
将返回一个挂起的promise,并将在随后的上对其进行评估,然后
阅读有关Promise.prototype.then()文档的更多信息。
我刚开始学习javafx来构建桌面应用程序。但有一件事我不明白。我的问题是:我们可以通过编写代码来创建gui,如下所示: 或者,我们可以用场景构建器创建gui,如下所示: 如果第二种方法可用,我们为什么要使用编写代码,比如在哪里放置这个标签或按钮或其他什么。?
我在客户端使用vue、vue路由器,在服务器端使用express、morgan(MEVN应用程序) 在客户端我用vue cookie设置cookie 在服务器端,我使用CookieParser 所以,在应用程序。我有这样的代码 并且,在文件中,我有这样一个GET请求的代码 问题是,var loginHash=req.cookies['Login'];总是返回未定义的,即使我有登录cookie 添加
问题内容: Go具有非常整洁的多个返回值范例。但是它看起来和使用具有相同符号的不同机制。这是一个简单的示例: 在上面的示例中,给出错误为返回两个值,而和-两个表达式都正常工作而没有任何错误。为什么会有不同的行为? 问题答案: 在地图,数组或切片上使用内建的获取,并且还允许一个 或 两个变量。用户定义的函数和方法不是这种情况。如果一个函数声明了两个返回值,则必须告诉他们如何处理这两个返回值,或者忽略
(免责声明:人们通过facebook、firebase等请求询问使用异步操作时数据为空/不正确时,会产生很多问题。我提出这个问题的目的是为每个从android异步操作开始的人提供一个简单的答案。) 我试图从我的一个操作中获取数据,当我使用断点或日志调试它时,值就在那里,但当我运行它时,它们总是空的,我该如何解决这个问题呢? 火力基地 脸书 等。
我不知道该用什么。我有两页——简介。jsp(1)和booksList.jsp(2)。对于每个页面,我都创建了一个控制器类。第一页有打开第二页的按钮: 第一个问题是:我不确定这个按钮的正确性。它工作得很好,但是按下这个按钮后我有问号。 第二个问题是:当我按下该按钮时,调用带有下一个注释的方法(第二页的控制器): 我应该用这种方法返回什么?换句话说,我怎么能从第一页跳到第二页? < li> < li>
问题内容: 我是一名编程初学者,对函数的返回值有疑问。 我正在学习Java。 我已经附上了我的书中具有经典选择排序功能的代码。 现在显然来自本书的代码可以正常工作。但是,主要功能中的以下三行是我的问题的基础: int [] a = new int [] {1,9,2,8,3,7,4,6,5}; 排序(a); if(ascending(a))System.out.println(“ Works”