从承诺中发出 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。是的,你可以在这里问这样的问题。
这里是 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。是的,你可以在这里问这样的问题。