javascript - 函数中的promise和var等于promise之间的Javascript区别
问题描述
我正在尝试处理一些承诺,但我对以下两种使用承诺的方式之间的区别感到有些困惑:
第一种方法:
function myfunction() {
return new Promise((resolve, reject) => {
// do stuff
});
}
第二种方法:
var myfunction = new Promise((resolve, reject) => {
// do stuff
});
这两者有什么区别?
是否有偏好何时使用其中一种?
解决方案
简而言之,您的两个示例就像比较这两个语句:
var x = 1;
var x = function() { return 1;}
第一个定义一个变量并为其赋值。第二个定义一个变量并为其分配一个函数。该函数必须在它执行任何操作或产生任何特定值之前调用。
您的第一个代码示例:
function myfunction() {
return new Promise((resolve, reject) => {
// do stuff
});
}
是一个创建并返回新承诺的函数。当它被调用时。您必须在它执行任何操作之前调用该函数。您显示的代码只是定义了一个函数,但实际上并没有运行任何东西。 myfunction
是一个函数。要获得承诺,您必须调用该函数,如下所示:
myfunction().then(...).catch(...)
您的第二个代码示例:
var myfunction = new Promise((resolve, reject) => {
// do stuff
});
创建一个新的承诺并将承诺本身分配给您的变量myfunction
。此代码运行后,myfunction
将包含一个承诺。
所以,在第一个例子myfunction
中是一个函数。在第二个例子中,myfunction
是一个承诺。
这两者有什么区别?
如上所述,它们是用于不同目的的不同代码段。
是否有偏好何时使用其中一种?
这取决于你想做什么。如果您想定义一个可重复使用的函数,您可以多次调用它来创建一个 Promise(可能会跟踪一些异步操作),那么您将使用第一个函数,并且每次您想要运行异步操作时都会调用它,并且收回承诺。
如果您想(仅此一次)创建一个承诺并将其放入变量中,您将使用第二个。不同的代码结构用于不同的目的,做不同的事情。
请记住,promise 只是一个普通的 Javascript 对象,它充当通知系统,用于跟踪和通知其他代码有关异步操作的完成。当您执行new Promise()
所有操作时,就会创建一个新的 Javascript 对象。Promise 只是简单的 Javascript 对象,带有一些方法和一些实例数据。他们没有观察任何事物的魔力。事实上,他们只做他们被告知的事情。有些人认为他们以某种方式自动知道它们内部的异步操作何时完成。他们不。您必须手动挂钩到异步操作的完成操作并手动调用resolve(...)
or reject(...)
。当你这样做时,promise 将通知任何已经安装了自己的侦听器.then(...)
or .catch(...)
。
推荐阅读
- docker - 在 docker 工具箱中运行 nmap
- docker - 从 Github 拉取私有包
- python - 在没有 Panda 或 NumPy 的 Python 中反向索引(小)数据集
- java - 运行集成测试后如何取消合并分层@ContextConfiguration(应用程序上下文)
- c# - 我正在尝试为商店产品创建一个类,当我尝试打印使用我的类制作的对象时,它给了我消息“exercise_93.Product”
- html - 自最近更新以来,从检查元素样式复制会产生换行符
- json - 如何在 Ionic 中正确读取 JSON 文件?
- react-native - 使用视图组件使用轮播?
- excel - 根据另一个单元格中的值在一个单元格中创建验证
- javascript - 写动画就是去掉 HTML 标签