Javascript 将resolve()和then()方法的使用与Promise混淆

Javascript 将resolve()和then()方法的使用与Promise混淆,javascript,Javascript,我在学习JS中的承诺,使用resolve()和then()让我有点困惑。因此,据我所知,promise充当异步操作的包装器,使用promise的原因是为了确保更容易链接。对吗?然后,使用resolve()的原因是,它指向我们获取数据的位置,然后我们利用Then()对数据进行处理。对吗?如果没有,你能简单地解释一下为什么要使用resolve()和then()。如果这对你有帮助,我认为承诺是未来的价值。我喜欢用票来比喻。例如,当你买食物时,你会得到一张票。你已经支付了食物的费用(你发起了获取食物的行

我在学习JS中的承诺,使用
resolve()
then()
让我有点困惑。因此,据我所知,
promise
充当异步操作的包装器,使用
promise
的原因是为了确保更容易链接。对吗?然后,使用
resolve()
的原因是,它指向我们获取数据的位置,然后我们利用
Then()
对数据进行处理。对吗?如果没有,你能简单地解释一下为什么要使用
resolve()
then()

如果这对你有帮助,我认为承诺是未来的价值。我喜欢用票来比喻。例如,当你买食物时,你会得到一张票。你已经支付了食物的费用(你发起了获取食物的行动),但是食物还没有准备好,因此,你可以获得一张占位符(票),你可以稍后交换食物。现在,
resolve
是他们在内部通知食物准备好的方式。而
则是订阅通知的地方


所以,他们
解决(食物)
,然后你得到通知
,然后(食物)
。你得到通知,我的意思是,你的回电会和食物一起被呼叫。

resolve
reject
只是告诉来电者你的承诺已经完成(它已经
解决了
拒绝了
。然后可以使用
,但我更喜欢在可以的时候使用
wait

使用
返回新承诺((解析,拒绝)=>{})
是一种很好的方式,它可以将东西包装成异步的,这是非常棒的,但是大多数情况下,如果某个东西返回一个
承诺(就像许多库开始做的那样),那么您可以等待它。与调用
相同。然后根据承诺调用
(从10000英尺的高度)

例如:

constmypromise=async()=>{
返回新承诺((解决、拒绝)=>{
设置超时(()=>{
下决心(我做完了);
}, 1000);
})
}
//使用。然后以“回调方式”兑现你的承诺
myPromise().then(text=>console.log(text));
异步函数等待PROMISE(){
//用等待来呼唤你的承诺
const result=等待我的承诺();
控制台日志(结果);
}

等待提议()
在前一个承诺解析后,使用
then
方法运行代码

resolve
方法用于做两件事:1)结束承诺;2)如果将数据传递给它,它会将该数据传递给
然后
回调

这使得编写在其他代码之后运行的代码变得容易。例如:

let p=新承诺((解决、拒绝)=>{
设arr=[];
对于(设i=0;i<10;i++)arr.push_-back(i);
解决(arr);
});
p、 然后(arr=>console.log(arr));
p.then
中的回调将仅在前一个承诺解析后运行,即调用
resolve()

如果您不想将数据传递到
resolve
,只需执行
resolve(null)
或类似操作。

承诺、解决和拒绝
newpromise()
Promise.resolve()
,以及
Promise.reject()
都会创建一个Promise实例

然后抓住
.then()
.catch()
用于对promise实例返回的异步值作出反应

那么有什么区别呢?
newpromise()
用于执行异步操作。它必须使用值解析或拒绝

Promise.resolve()
Promise.reject()
是将值包装为已解析或已拒绝的承诺值

.then()
是以一个已解决的承诺及其价值作出反应

.catch()
是以拒绝的承诺及其价值作出反应

结论 所有承诺必须使用
new Promise()
Promise.resolve()
Promise.reject()
中的一种启动。只有这样,您才能使用
.then()
.catch()


想想看,就像普通英语一样,你只在做了某件事后才使用“then”这个词(例如,做出承诺)。

承诺是以后可用数据的占位符

const promise=新承诺(函数(解析){
log('等待异步…');
//等待一些异步的东西来提供数据
setTimeout(函数(){resolve('theData');},2000);
});
promise.then(函数(数据){
log('承诺已用数据解析:'+数据);
});

console.log(“监听承诺解析”)
resolve(或reject)解析承诺,即在此时将其状态从Pending(挂起)更改为Resolved(已解析)/Rejected(已拒绝)。然后调用
回调。然后是承诺解析值的方式used@JaromandaX,谢谢你的评论。所以,resolve()表示从异步操作中获取数据的位置。正确的?例如,resolve(request.responseText)@JaromandaX,拜托我真的需要你的帮助,我只是想得到resolve()因此更容易理解。一旦从异步操作中获得
数据
,就会调用
resolve
,这会导致传递到
的函数,然后通过传递到
resolve
数据调用
。所以,是的,我认为你的理解是正确的。@RockySims,嘿,伙计,谢谢你的评论,请你为这个问题创造一个答案,这样如果你不介意的话,我当然可以接受:)