検索

ホームページ  >  に質問  >  本文

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(..)

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

阿神阿神2781日前588

全員に返信(3)返信します

  • ringa_lee

    ringa_lee2017-04-17 14:42:26

    testObject.insertMain(コード,名前)
    .then((結果)=>{
        var insertId = result.insertId;
        insertId を返します。
    })
    .then(関数(挿入Id){
        戻り testObject.insertDetail(insertId);
    })
    .then(関数(詳細){
        コンソール.ログ(詳細);
    })
    .catch(..)

    返事
    0
  • PHP中文网

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

    testObject.insertMain(コード,名前)
    .then((結果1)=>{
        return testObject.insertDetailf(result1.id,......)
    }).then(関数(結果){
        console.log('終了');
    }).catch(関数(エラー){
        console.log(err.stack);
    })

    返事
    0
  • 伊谢尔伦

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

    非 Promise 実装を Promise 実装に変換するのは大規模なプロジェクトです。最初の Promise の then は 2 番目の Promise または 2 番目の then の値を返し、常に < にすることができます。 code> と が続くので、最後にキャッチするだけです。

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

    関数 insertMain() {
        return Promise.resolve("主な結果");
    }
    
    関数 insertDetail(result) {
        return Promise.resolve({
            メイン: 結果、
            詳細: 「詳細結果」
        });
    }
    
    
    insertMain().then(result => {
        戻り挿入詳細(結果);
    }).then(r => {
        コンソール.ログ(r);
        // { main: 'メイン結果'、detail: '詳細結果' }
        r.more = "さらなる結果";
        Promise.resolve(r) を返す;
    }).then(r => {
        コンソール.ログ(r);
        // { main: '主な結果',
        // 詳細: '詳細結果',
        // 詳細: '詳細な結果' }
    });
    

    返事
    0
  • キャンセル返事