我刚刚接受了许诺的好奇心。 如果我直接在链中拒绝,我可以稍后抓住变量。
如果我拒绝变量,我根本无法捕捉到。在这种情况下,承诺始终被认为是解决的:
let proMISS = Promise.resolve();
proMISS.then(() => console.log('THEN 1'))
.then(() => Promise.reject())
.then(() => console.log('THEN 2'));
setTimeout(() => {
proMISS.catch(() => console.log('CATCH'));
}, 1000);
这确实有效:
let PROmiss = Promise.resolve()
.then(() => console.log('THEN 1'))
.then(() => Promise.reject())
.then(() => console.log('THEN 2'));
setTimeout(() => {
PROmiss.catch(() => console.log('CATCH'));
}, 1000);
这似乎没有确定性
答案 0 :(得分:1)
我想我找到了答案。
变量中的promise已经解决,但链不是。 因此,如果你抓住变量,就必须解决它。
每次添加成员时,都必须保存链的最后一个成员。
答案 1 :(得分:1)
你基本上在做
let promise1 = Promise.resolve();
let promise2 = promise1.then(() => console.log('THEN 1'))
.then(() => Promise.reject())
.then(() => console.log('THEN 2'));
setTimeout(() => {
promise1.catch(() => console.log('CATCH'));
promise2.catch(() => console.log('CATCH'));
}, 1000);
是的,promise1
与promise2
不同。第一个用undefined
完成,而第二个被拒绝。
答案 2 :(得分:0)
SyncToServer syncToServer=new SyncToServer(null,"url",jsonObject);
syncToServer.start(new SyncToServer.OnWebServiceListener() {
@Override
public void onComplete(String result) {
}
@Override
public void onError() {
}
});
useLibrary 'org.apache.http.legacy'
链的输出放在一个新的变量let proMISS = Promise.resolve();
let promissTwo = proMISS.then(() => console.log('THEN 1'))
.then(() => Promise.reject())
.then(() => console.log('THEN 2'));
setTimeout(() => {
promissTwo.catch(() => console.log('CATCH'));
}, 1000);
中,然后处理它
你的第二个例子基于相同的概念。