如何正确获得承诺价值?

时间:2018-02-21 16:40:59

标签: promise

请考虑以下代码:

function toolsQueryResult(){
    const query = `query{......}`  
    return request('http://...', query,).then(data =>  { return data })
}   

   var toolsQueryResult= toolsQueryResult();
   var toolsNames      = [];


   toolsQueryResult.then(function(result){
   result['key'].forEach(function(item){
    toolsNames.push(item["name"])
  })
 })

console.log(toolsNames)

这将返回并打印出空列表“[]”给我。有人知道为什么吗? 但是如果我把“console.log()”放在两个最后的“})”之间,它会正确地返回工具列表。我应该如何使用这个promise对象在第二个“})”之后正确地获得工具列表码?

1 个答案:

答案 0 :(得分:0)

原因是,您的console.log语句在承诺toolsQueryResult解决之前执行。如果您有调试器工具并放置断点以查看我刚刚说过的内容,那将非常有用和有用。

也就是说,在承诺被解析或拒绝之外的console.log超出了整个目的,这意味着您在完成执行之前尝试输出一个语句,因此当您放置{{1}时在console.log函数内部声明它输出结果。

调整您的代码(将结果修改为一个简单的数组)供您调试并查看:https://jsfiddle.net/jayas_godblessall/vz8mcteh/

或在此处执行以查看:

then