@css3 没有办法,同步代码不可能立即获得异步的返回,只能等待环境(浏览器或者 Node )告诉你异步代码执行结束了,你才能真正“拥有”返回值. 处理返回,要不用回调函数,要不用 Promise
var result = undefined
let url = “https://www.v2ex.com/api/topics/latest.json”
return $http.get({
url: url
}).then(resp => {
var data = resp.data[0][‘title’]
// 这里你获得了返回,直接用就完了
})
如果你需要封装成函数让代码看起来更模块化,可以传一个回调函数
funtion test(callback) {
var result = undefined
let url = “https://www.v2ex.com/api/topics/latest.json”
return $http.get({
url: url
}).then(resp => {
var data = resp.data[0][‘title’]
callback(data);
})
}
function useData(data) {
// 任何依赖于异步返回的代码都放这里
console.log(data)
}
test(useData);
// 高级一点的做法是返回一个 Promise
funtion test() {
var result = undefined
let url = “https://www.v2ex.com/api/topics/latest.json”
return $http.get({
url: url
}).then(resp => {
var data = resp.data[0][‘title’]
return data; // .then 返回类型是 Promise,这个 Promise 会 resolve 为 .then 里的函数返回值
})
}
test().then(data => {
// 任何依赖于异步返回的代码都放这里
console.log(data)
})
// 再高级一点是用 async/await,不过心里要明白,async/await 只是语法糖,实际还是 promise 。之所以高级是因为视觉上像同步代码,增强了可读性
funtion test() {
var result = undefined
let url = “https://www.v2ex.com/api/topics/latest.json”
return $http.get({
url: url
}).then(resp => {
var data = resp.data[0][‘title’]
return data
})
}
async main() {
const data = await test();
// 任何依赖于异步返回的代码都放这里
console.log(data)
}
main();