2017-08-20 77 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