我必须异步调用第三方API,并且希望代码执行等待响应。
async function getOrderData(orderId) {
return new Promise(function (resolve, reject) {
var service = new APIservice();
service.GetOrderData(oid, function (event) {
if (event && event.hasErrors() == false) {
resolve(event.result);
} else {
reject(null);
}
});
});
}
var order = getOrderData(orderId);
//from here the code should only resume once the var order is defined with whatever's returned from the api
这是顶级代码(不是异步代码),所以我不能使用await。
编辑: 回答一些建议:
this.$onInit = function () {
this.order = "wrong value";
getOrderData(orderId).then(order => {
this.order = "correct value";
});
};
此功能将以“测试”为“错误值”结束。这就是我要避免的事情。
答案 0 :(得分:2)
您可以await
Promise
返回的getOrderData()
。
但是,要使用await
,您需要在getOrderData
函数中包装对async
的调用(在目录中没有顶层await
这样的东西此刻-可能{em> 一天be a thing。目前,它只能在async
函数内部使用):
// getOrderData function initializaion...
(async _ => {
var order = await getOrderData(orderId); // wait to recieve data before proceeding
// You can now write code wih `order`
})().catch(err => {
console.error(err);
});
或者,您可以从返回的.then
的{{1}}的{{1}}回调(await
只是语法糖)中编写代码,如下所示:< / p>
Promise
答案 1 :(得分:0)
您需要这样的东西:
async function the_whole_thing() {
async function the_api_wrapper() {
return new Promise((resolve, reject) => {
setTimeout(() => resolve('joe!'), 10);
});
}
let result = await the_api_wrapper();
console.log(result);
}
the_whole_thing();
注释#1 :我刚刚用setTimeout
换出了您正在调用的API,因为它也是一个需要回调的函数(类似于您的情况),并且还可以确保事情是异步发生的。
注释#2 :请注意,async/await
语法只能在另一个async
函数的主体中使用,所以这就是为什么我将整个内容包装好了,在the_whole_thing
中。