Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/44.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 promise JS中resolve和return的区别_Javascript_Node.js - Fatal编程技术网

Javascript promise JS中resolve和return的区别

Javascript promise JS中resolve和return的区别,javascript,node.js,Javascript,Node.js,**如果我有**返回结果 这一承诺是否已经兑现?“已解决的承诺”是什么意思?承诺通过值结果来解决。在您编写的代码段中,then块不会改变任何内容,因为它承诺使用结果值进行解析,就像没有return语句和then块一样 但是,如果您返回不同的值,那么承诺将使用该值进行解析。如果您要在这个then中返回另一个承诺,您可以“链接”这些块,也就是说,您可以编写下一个“then”块,它将在前一个then块中接收返回承诺的解析值 解析的承诺意味着完成了由承诺处理的代码,并使用传入的解析值执行传递给然后方法的

**如果我有**
返回结果


这一承诺是否已经兑现?“已解决的承诺”是什么意思?

承诺通过值
结果
来解决。在您编写的代码段中,
then
块不会改变任何内容,因为它承诺使用
结果
值进行解析,就像没有return语句和
then
块一样

但是,如果您返回不同的值,那么承诺将使用该值进行解析。如果您要在这个
then
中返回另一个承诺,您可以“链接”这些块,也就是说,您可以编写下一个“then”块,它将在前一个
then
块中接收返回承诺的解析值


解析的承诺意味着完成了由承诺处理的代码,并使用传入的解析值执行传递给
然后
方法的回调中的代码

Java脚本是一种单线程语言。这简化了大多数任务;但是,这意味着异步任务必须在回调函数中处理。是一种面向对象的回调类型,它提供了比简单回调函数更强大的功能

已解析的promise表示将调用promise对象的函数。在你的例子中,承诺已经解决了

拒绝承诺意味着将调用承诺对象的函数

在函数中返回结果时,允许。然后,每个结果都可以在将其传递给链中的下一个承诺之前更改或操纵结果


在你的例子中,你解决了第一个承诺,然后为链中的下一个承诺返回了一个结果,你不能有效地处理它,返回的结果没有任何效果。

在询问承诺之前,你应该考虑函数

var p1 = new Promise (function (res, rej){
    res(42);
}).then((result) => {return result;});
哪一种是写你的文章的较短的方式

result => result
事实上是这样。它被称为函数,这意味着它将准确返回传入的内容

作为
then
处理程序,那么,它完全没有任何意义——它是一个。因此,
then
返回的承诺与调用
then
的承诺处于完全相同的状态,具有完全相同的值(如果有)

仔细考虑一下
承诺。然后(fn)
做什么。它创造了一个新的承诺。只要
promise
仍然挂起,那么新的承诺也仍然挂起。如果满足了
promise
,它将调用
fn
,将满足的值作为参数,执行
fn
,并且(所有其他条件相同)使用
fn
返回的值满足新的承诺。另一方面,如果拒绝了
承诺
,则不调用
fn
,并且假设没有第二个参数传递给
然后
,则新承诺将处于拒绝状态,并具有相同的拒绝原因——本质上,在这种情况下,承诺可以被视为“通过”

那么在

(result) => { return result; }
其中,
identity
result=>result
,当
promise
使用某个值
v
实现时,则使用参数
v
调用
identity
,返回相同的值
v
,然后使用相同的值实现
创建的新承诺——换句话说,它创建了一个与
promise
完全相同的状态和值的新promise。换一种说法,它什么也不做——或者更确切地说,它只是创建了一个与调用
时的
相同的新承诺

就你而言:

promise.then(identity)
这一承诺是否已经兑现?“承诺”是什么意思


通过调用
res(42)
,通过调用允诺构造函数(
newpromise
)创建的允诺立即用值
42
实现。(您也可以编写
Promise.resolve(42)
,意思完全相同。)然后
创建第二个Promise。由于调用
then
的第一个承诺已经实现,因此立即使用
42
的参数(
result
)调用
then
处理程序。它返回相同的值,因此第二个承诺,即
then
创建的承诺,将使用
42
的值来实现。因此,在这一点上,
p1
是一个值为
42
的已兑现承诺

var p1 = new Promise (function (res, rej){
   res(42); })
.then((result) => {return result;});
您将看到42条日志记录到控制台


以上这些都没有什么特别神奇的地方。这一切都源于承诺的基本原则:它们可能的状态,如果需要如何创建它们,以及
then
的含义。一个好的教程或文档(如)应该会让您走上正确的轨道。

从技术上讲,“已解决”不同于“已实现”,并且在承诺实现时调用
then
处理程序。“已解决”可以指通过另一个尚未履行的承诺得到解决的状态。那么“返回”是否解决了该承诺?并给它一个值?不,返回值并不能解析您创建的原始承诺对象。此简短的引用可能有助于进一步澄清这些术语:在基本承诺实现之前,甚至不会调用
then
处理程序。通过
创建的承诺,然后
通过实现的基础承诺来实现。来自
then
处理程序的返回值成为已实现承诺的值。那么,什么实现了承诺呢?我认为“return”是一个新的promiseNo,return既不能创造承诺,也不能履行承诺。
然后
本身在编写时创建了一个新的承诺。新的舞会
p1.then(v => console.log(v))