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。