Javascript 在.then()中显式调用resolve()
如果我创建一个新的promise对象并像这样返回一个新的promise对象,p1将保持挂起状态Javascript 在.then()中显式调用resolve(),javascript,asynchronous,promise,Javascript,Asynchronous,Promise,如果我创建一个新的promise对象并像这样返回一个新的promise对象,p1将保持挂起状态 var p1 = new Promise((resolve, reject) => { return new Promise((resolve, reject) => { resolve(1); }); }); 但是,如果我用then()和调用revolve来链接内部的新承诺,那么外部的新承诺p1将得到解决 var p1 = new Promise((re
var p1 = new Promise((resolve, reject) => {
return new Promise((resolve, reject) => {
resolve(1);
});
});
但是,如果我用then()和调用revolve来链接内部的新承诺,那么外部的新承诺p1将得到解决
var p1 = new Promise((resolve, reject) => {
return new Promise((resolve, reject) => {
return resolve(1);
}).then(data => resolve(123));
});
似乎
.then()
中的resolve()。有人能告诉我这里发生了什么事吗?为什么不能解析第一个p1,为什么解析第二个p1?承诺执行器函数(传递给新承诺的函数)的返回值被完全忽略;这没有意义。从它那里返回承诺没有任何作用。此外,正如您所说,您正在调用内部承诺的解析
,而不是外部承诺
第二个表单在内部承诺上使用实现处理程序来实现外部承诺。虽然您可以这样做,而且有时可能是适当的,但在通常情况下,您只需直接使用内部承诺,然后在回调中执行其他工作。在第一个示例中,您正在跟踪参数resolve
。尝试:
var p1=新承诺((resolve1,reject1)=>{
决议1(新承诺)(决议2,拒绝2)=>{
决议2(1);
}));
});
第二个代码段中的promisep1
被解析为内部的resolve
,然后回调指的是外部promise
构造函数的回调中传递的resolve
,而不是内部promise
构造函数的resolve
在第一个代码段中,resolve
总是指内部Promise
构造函数的resolve
,因此外部Promise永远不会得到解析
var p1 = new Promise((resolve, reject) => {
return new Promise((resolve, reject) => {
return resolve(1);
}).then(data => resolve(123));
});
只需重命名回调并选中:
var p1=新承诺((外部解决,拒绝)=>{
返回新承诺((innerResolve,reject)=>{
//内部解决方案
返回innerResolve(1);
})
。然后(数据=>{
控制台日志(数据);
//外部解决方案
外部解决(123);
});
});
p1.then(console.log)
我认为外部承诺是多余的。你想用这个嵌套解决什么问题?也许有更好的办法解决这个问题。