2017-08-20 60 views
0

如何获得低于返回值?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}}

回答

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

sql.execute是一个异步调用,执行console.log()不会等待它完成,并会显示当前的承诺,其状态
访问的结果,你可以做

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

但如何,如果我想获得结果值并放置为新变量,以便我可以使用任何活动的值。 –

+0

您可以在当时执行此操作,但无法同步访问它,如果您想在解决诺言后使用它,则必须在then()中访问它 – marvel308

+0

可以在解决诺言后返回值并分配给新变量?我希望获得超出承诺的价值 –

3

因为它已经在上面回答过了 - 你的函数返回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 
    } 
} 

阅读有关异步更多信息/等候在这里:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/await