Javascript 我可以控制then()方法返回的承诺的解析方式吗
给定我创建的Javascript 我可以控制then()方法返回的承诺的解析方式吗,javascript,ecmascript-6,promise,Javascript,Ecmascript 6,Promise,给定我创建的myPromise。 它在解析时返回另一个promise let myPromise = new Promise((resolve: Function, reject: Function) => { setTimeout(() => { resolve('my promise resolved after 2 seconds'); }, 2000); }) myPromise.then(value => { consol
myPromise
。
它在解析时返回另一个promise
let myPromise = new Promise((resolve: Function, reject: Function) => {
setTimeout(() => {
resolve('my promise resolved after 2 seconds');
}, 2000);
})
myPromise.then(value => {
console.log(value);
}).then((value) => {
// how can I make the promise returned by myPromise.then()
//resolve in a specific way ?
})
如何控制由
myPromise.then()返回的promise
解析的方式?如果不需要执行其他异步操作,只需返回值:
myPromise.then(value => {
return value;
}).then((value) => {
// ...
})
但是我不知道你为什么要这样做,因为你可以先删除第一个,然后删除第二个,然后删除第二个
如果必须执行另一个异步操作,则可以返回新承诺,并在需要时解决它:
myPromise.then(value => {
// Do some other async operation. I am explicitly creating the promise
// here inline to be clear. In real code, you'd probably want to wrap this
// in another function.
return new Promise((resolve: Function, reject: Function) => {
resolve(value);
});
}).then((value) => {
// ...
})
在.then()
处理程序中,有三个选项都会影响该.then()
调用返回的承诺(我将其称为“父”承诺)
返回值。当您从.then()
处理程序返回值时,该值将成为最初调用.then()
时返回的承诺的解析值
返回承诺。当您从.then()
处理程序返回承诺时,它链接到父承诺,父承诺将“遵循”新承诺(解析/值、拒绝/原因)
引发异常。这将导致拒绝父承诺,异常将成为拒绝原因
如果从.then()
处理程序中不返回与返回未定义的
相同的内容,则只需将解析值设置为未定义的
(与返回值未定义的
相同)
您显示的此结构:
myPromise.then(value => {
console.log(value);
}).then((value) => {
// how can I make the promise returned by myPromise.then()
//resolve in a specific way ?
});
很麻烦,因为第一个.then()
处理程序不返回任何内容。这与返回undefined
相同,因此第二个值总是undefined
,因此没有用处。如果您对第一个.then()
处理程序有实际原因,则可以通过如下方式返回所需值:
myPromise.then(value => {
console.log(value);
return value;
}).then((value) => {
// how can I make the promise returned by myPromise.then()
//resolve in a specific way ?
});
我不明白这个问题。当调用then
函数时,承诺已经解决。您能重新表述您的问题吗?很难理解这个问题返回值,将值传递给下一个值,或者返回新承诺等待新承诺,下一个值就是它的结果。在我的回答中,我给出了一个示例,说明了如何简单地返回值,以及如何返回新承诺。出于好奇,你想做什么?为什么不返回值?您可以这样做,但问题已经基本上是使用第二个。然后。所以我假设他们想在第二个之前做一些异步的事情。然后。第二个部分是反模式。根本不需要创建一个新的Promise
。@DanielB如果必须执行一个新的异步操作,比如http调用,你会怎么做?@DanielB我添加了一条注释,以澄清在实际代码中你希望包装这个Promise。