【问题标题】:best way to make a knex request from inside a promise从承诺内部发出 knex 请求的最佳方式
【发布时间】:2022-02-01 14:40:20
【问题描述】:

这里是新手,试图远离续集。

我正在尝试在承诺中使用一系列 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 比续集更容易。

【问题讨论】:

    标签: javascript node.js es6-promise knex.js


    【解决方案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的结果并返回到下一个。 此外,您无需致电knex.destroy(),因为您将关闭连接。

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

    【讨论】:

    • “这太过分了,有点没用” - 你太善良了!
    • 通常关于 SO 的新手问题往往会因为没有进行足够的研究而被否决。您的解决方案非常优雅并且完美运行。非常感谢。
    猜你喜欢
    • 2019-09-14
    • 2018-11-18
    • 1970-01-01
    • 2021-07-12
    • 1970-01-01
    • 2014-05-22
    • 1970-01-01
    • 1970-01-01
    • 2017-04-12
    相关资源
    最近更新 更多