Javascript - 动态函数调用

时间:2017-08-20 09:48:45

标签: javascript

如何获得低于回报价值?

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}}

3 个答案:

答案 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返回值。您需要将所有逻辑放在rejectedfulfilled函数上。

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));    
})