首页 > 解决方案 > Promise 中 Reponse 代表什么在 Javascript 中?

问题描述

我正在学习 Javascript 中的 fetch 方法,当我说

fetch.("url").then(r => {if(r.status!==200)doSomething();} )

当我将鼠标悬停在“fetch”上时,它说它返回Promise<Response>,并且“then”中函数中的 r 参数是一个响应。

我的问题是: <> 中的类型是什么意思?我知道在 C++ 中它代表一个模板,在这种情况下是一个类,但是函数如何知道“r”参数是一个响应?

标签: javascriptfetch

解决方案


Reponse 在 Javascript 的 Promise 中代表什么?

没有什么。Promise<Response>不是有效的 Javascript 语法,所以它没有任何意义。

当我将鼠标悬停在“fetch”上时,它表示它返回 Promise,而“then”中函数中的 r 参数是一个响应......我的问题是:<> 中的类型是什么意思?

javascript 编程语言本身不附带编辑器或 IDE。大多数人在他们最喜欢的文本编辑器中编写 javascript。您需要查看代码编辑器或 IDE 的文档以了解弹出窗口的含义。

但是我们可以猜到它的含义。<>不是有效的 javascript 语法,因此开发代码编辑器的程序员可能从 C++/Java 中获得灵感。我的猜测是它在 C++/Java 中的意思是一样的——如果你从 C++/Java 程序员的角度来看,Promise 是一个模板/泛型(它不是真的在 javascript 中,因为没有这样的东西)视图,它将编译为一个对象,该对象的.then()方法需要一个参数为 in 类型的函数<>(类似于 C++ 和 Java 中的 Futures)。

函数如何知道“r”参数是响应?

它不是。编写 Promise 接口的程序员希望您将一个接受一个参数的函数传递给它的.then()方法。然后,程序员的代码将调用您传递给的函数.then()并将对象传递给它Response

这是一个例子。让我写这个简单的函数:

function sayHello (formatter) {
    console.log(formatter("Hello World"));
}

现在让我们使用上面的函数:

sayHello(h => {
    return "This is a " + h.toUpperCase() + " program";
})
// output = This is a HELLO WORLD program

您的问题是sayHello函数如何知道h参数是一个值为“Hello World”的字符串?

答案很简单,因为我,写函数的程序员sayHello(),把它传给了你。

怎么知道那h是字符串“Hello World”?好吧,希望我会在某处写一些文档供您阅读。

那么你怎么知道r你的代码中的价值是什么?您需要阅读文档:https ://developer.mozilla.org/en-US/docs/Web/API/fetch 。特别是第二段的第一句话:

承诺解析为代表对您的请求的响应的 Response 对象。


推荐阅读