cari

Rumah  >  Soal Jawab  >  teks badan

node.js - promise嵌套的问题,后面一个then用到前面的then的返回值。

nodejs中关于ES6的promise嵌套写法
我打算实现如下功能:插入主记录,返回insertId,然后插入明细记录

testObject.insertMain(code,name)
.then((result)=>{
    var insertId = result.insertId;
    testObject.insertDetail(insertId,........)
    .then((result1)=>{
        testObject.func3(......)
        .then(..)
        .catch(..)
    })
    .catch(..)
.catch(..)

这种逻辑似乎又进入了无限嵌套逻辑。求教如何写正确!

阿神阿神2778 hari yang lalu587

membalas semua(3)saya akan balas

  • ringa_lee

    ringa_lee2017-04-17 14:42:26

    testObject.insertMain(code,name)
    .then((result)=>{
        var insertId = result.insertId;
        return insertId;
    })
    .then(function(insertId){
        return testObject.insertDetail(insertId);
    })
    .then(function(detail){
        console.log(detail);
    })
    .catch(..)

    balas
    0
  • PHP中文网

    PHP中文网2017-04-17 14:42:26

    testObject.insertMain(code,name)
    .then((result1)=>{
        return testObject.insertDetailf(result1.id,......)
    }).then(function(result){
        console.log('finish');
    }).catch(function(err){
        console.log(err.stack);
    })

    balas
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-17 14:42:26

    把非 Promise 实现改造成 Promise 实现是个巨大的工程。如果都是 Promise 实现就好办了,第一个 Promise 的 then 返回就是第2个 Promise 或者第二个 then 的值,就可以一直 then 下去了,最后来 catch 就行。

    xxx.then().then().then().then().catch()

    function insertMain() {
        return Promise.resolve("main result");
    }
    
    function insertDetail(result) {
        return Promise.resolve({
            main: result,
            detail: "detail result"
        });
    }
    
    
    insertMain().then(result => {
        return insertDetail(result);
    }).then(r => {
        console.log(r);
        // { main: 'main result', detail: 'detail result' }
        r.more = "more result";
        return Promise.resolve(r);
    }).then(r => {
        console.log(r);
        // { main: 'main result',
        //  detail: 'detail result',
        //  more: 'more result' }
    });
    

    balas
    0
  • Batalbalas