2017-06-07 11 views
0

我怎樣才能做到以下藍鳥承諾。模塊我使用的是bluebird,表B中 我如何處理與承諾而不是回調的嵌套查詢?

  • 插入記錄表下使用A_ID爲外鍵
  • 插入記錄使用A_ID爲外鍵
  • promise-mysql

    1. 插入表A和回報A_ID現在向用戶發送所有記錄都添加的響應。

    我正在使用原生查詢。

  • 回答

    3

    的總體思路是:

    insetA() 
        .then(function(a_id){ 
        return Promise.all([inserB(a_id), inserC(a_id)]) 
        }) 
        .then(function(){ 
        res.send("all good") 
        }) 
        .catch(function(error){ 
        res.send("some error") 
        }) 
    
    
    function insetA(){ 
        return new Promise(function (resolve, reject) { 
        // inserting A 
        // resolve(a_id) 
        }) 
    } 
    
    0

    我剛查過,看到函數在promise-mysql庫返回承諾。你知道那是什麼意思嗎?你可以用.then()鏈接每一個鏈接。

    下面是一個例子:

    var mysql = require('promise-mysql'); 
    var connection; 
    
    mysql.createConnection({ 
        host: 'localhost', 
        user: 'sauron', 
        password: 'theonetruering', 
        database: 'mordor' 
    }).then(function(conn){ 
        connection = conn; 
    }); 
    

    ,並在您的Web服務:

    return connection.query('insert into a values(. . . . .)') 
        .then(function(rows){ 
         var a_id = rows.insertId; 
         return connection.query('insert into b values(. . . . .)') 
          .then(function(rows){ 
           return connection.query('insert into c values(. . . . .)'); 
          }); 
        }); 
    

    實際上,你可以在第一.then(function(rows){})的目的鏈,但我只是想確保A_ID將不會出現在您插入表b和c的地方。