2017-08-11 62 views
0

我可以看到日志中的数据,但我无法从函数中获取它。从npm谷歌距离返回数据

var distance = require('google-distance'); 
distance.get(
{ 
    index: 1, 
    origin: '37.772886,-122.423771', 
    destination: '37.871601,-122.269104' 
}, 
function(err, data) { 
    if (err) return console.log(err); 
    console.log(data); 
    return data; 
}); 

我可以看到数据在控制台,所以我尝试这样做:

var distance = require('google-distance'); 
var output = distance.get(
{ 
    index: 1, 
    origin: '37.772886,-122.423771', 
    destination: '37.871601,-122.269104' 
}, 
function(err, data) { 
    if (err) return console.log(err); 
    return data; 
}); 
console.log(output); 

此日志“不确定”

我怀疑我需要使用一个承诺或东西。有人能给我一个例子吗?

更新: 以下是我如何实现承诺。

var promise = require('promise'); 
var tideDistance = {}; 
var p = new promise(function(resolve, reject) { 

    distance.get(
    { 
     index: 1, 
     origin: '37.772886,-122.423771', 
     destination: '37.871601,-122.269104' 
    }, 
    function(err, data) { 
     if (err) reject(err); 
     resolve(data); 
     return data; 
    }); 
}); 

p.then(function(result) { 
    tideDistance = result; 
    return result; 
}).catch(function(err) { 
    console.log(err); 
}); 
console.log(tideDistance); 

此日志{}

+0

的[我如何返回从一个异步调用的响应?]可能的复制(https://开头stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call) –

回答

0

使用回调函数

var distance = require('google-distance'); 
function callbackFunction(result) { 
    console.log(result); // use the result for manipulation 
} 
distance.get(
{ 
    index: 1, 
    origin: '37.772886,-122.423771', 
    destination: '37.871601,-122.269104' 
}, 
function(err, data) { 
    if (err) return console.log(err); 
    callbackFunction(data); 
}); 
-2
var distance = require('google-distance'); 
distance.get({ 
     index: 1, 
     origin: '37.772886,-122.423771', 
     destination: '37.871601,-122.269104' 
     }, function(err, data) { 
     if (err) 
      return console.log(err);  
     callback(data); 
     }); 
function callback(result){ 
     console.log(result); 
} 
+0

'console.log(result)'将在回调之前执行。 –