0

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 比续集更容易。

4

1 回答 1

1

你不需要每次都创建一个新的承诺,那是矫枉过正而且有点没用。你可以做:

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 的结果并返回到下一个 Promise。你也不需要打电话knex.destroy(),因为你会关闭连接。

ps是的,你可以在这里问这样的问题。

于 2022-02-01T06:40:20.770 回答