从承诺中发出 knex 请求的最佳方式

best way to make a knex request from inside a promise

这里是 knex 新手,试图摆脱续集。

我正在尝试在承诺中使用一系列 knex 原始调用。

经过大量研究,我想出了一个简单的工作示例,但我希望在 knex/promises 方面有更好背景的人在继续之前提出任何建议。

const firstPromise = ( promiseInput )   =>      {
        return new Promise((resolve, reject) => {
                console.log('parameter passed into promise: ' + promiseInput);

                knex.raw("SELECT VERSION()")
                .then(
                    (version) => {      console.log     ('inside:  ' + version[0][0]["VERSION()"] );
                                        resolve         ('outside: ' + version[0][0]["VERSION()"] );
                                }
                ).catch(
                        (err) => { reject(err); }
                )
        })
}

const secondPromise = ( input ) =>              {
        return new Promise (    (resolve, reject) => {
                resolve (input) ;
        })
}


console.log('Starting run.');

firstPromise('promise input.')
        .then(  (response)      =>      {       console.log     ('response from firstPromise: ' + response)     ;
                                                return response                                                 ;
                                        }                                                                               )
        .then(  (newResponse)   =>      console.log     ('ending! ' + newResponse)                                      )
        .then(  ()              =>      knex.destroy()                                                                  )
        .then(  ()              =>      secondPromise('stuff into second promise')
                                                .then((result) => { console.log('calling second promise: ' + result); return (result);} )       )
        .then(  (lastResponse)  =>      console.log     ('last response: ' + lastResponse)                              )
        .catch( (error)         =>      console.log     ('error! ' + error)                                             )
        ;

另外,请让我知道这个论坛是否适合此类问题。

感谢您的时间和考虑。

旁注:令人惊奇的是,knex 比续集要容易得多。

你不需要每次都创建一个新的承诺,那太过分了而且有点无用。 你可以这样做:

function firstPromise(promiseInput){
  console.log('parameter passed into first promise: ' + promiseInput);
  return  knex.raw("SELECT VERSION()");
}
function secondPromise(promiseInput){
  console.log('result of first promise passed into second promise: ' + promiseInput);
  return  [your knex stuff here]
}
[... other promieses]

firstPromise()
  .then(secondPromise)
  .then(thirdPromise)
  .then(console.log)

你的promise都是把上一个promise的结果返回给下一个。 您也不需要调用 knex.destroy() 因为您将关闭连接。

p.s。是的,你可以在这里问这样的问题。