如何获得低于回报价值?
var data = sql.execute({query:"select * from Profile_User"}).then(function (result){
return result; // actual result = [{id:1, name:"Mr. Test"}]
}, function( err ) {
console.log( "Something bad happened:", err );
});
console.log("Received data"+JSON.stringify(data));
我的控制台中的结果:Received data{"_handler":{"resolved":false}}
答案 0 :(得分:3)
正如上面已经回答的那样 - 你的函数返回Promise,所以只有当promise被解析时才会定义结果(如果promise失败,则不会被修改)。
这里的最佳做法是构建你的异步程序,当需要结果的所有代码都放在结果/拒绝Promise回调时:
var data = sql.execute({query:"select * from Profile_User"}).then(function (result){
console.log("Received data"+JSON.stringify(data));
// doing anything with data
}, function( err ) {
console.log( "Something bad happened:", err );
});
如果您需要“等待”而承诺将被解决 - 您可以使用新的异步/等待功能,但您可能会理解,这些东西将阻止您的线程执行,直到承诺解决。
在这种情况下,您需要将异步代码包装到另一个异步函数,如下所示:
async executeSQLAndDoSomething () => {
try {
var data = await sql.execute({query:"select * from Profile_User"}) // Will be thread stop here
console.log(data)
// Doint something with data
} catch (err) {
// ... error checks
}
}
在此处阅读有关async / await的更多信息:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/await
答案 1 :(得分:0)
您无法从Promise
返回值。您需要将所有逻辑放在rejected
或fulfilled
函数上。
var data = sql.execute({query:"select * from Profile_User"}).then(function (result){
console.log("Received data" + JSON.stringify(result));
}, function( err ) {
console.log( "Something bad happened:", err );
});
答案 2 :(得分:0)
sql.execute是异步调用,console.log()不会等待它完成并打印当前的promise及其状态
访问你可以做的结果
var data = sql.execute({query:"select * from Profile_User"}).then(function (result){
return result; // actual result = [{id:1, name:"Mr. Test"}]
}, function( err ) {
console.log( "Something bad happened:", err );
});
data.then(function(result){
console.log("Received data"+JSON.stringify(data));
})