很抱歉,如果此问题之前已经解决,我也检查了this,this one(我认为这是一个很好的领导,但我没有理解接受的答案),最后this一个。
我在switch语句中有这种情况:
function setFieldTransformation(iteration) {
//Omitting first hundred lines and switch declaration...
case "customer.subscriptionSet":
var subscriptionCode;
if (iteration.oldValue && iteration.newValue) {
if (Array.isArray(iteration.oldValue) && Array.isArray(iteration.newValue)) {
subscriptionCode = iteration.oldValue[0].service;
} else {
subscriptionCode = iteration.oldValue.service;
}
} else if (iteration.oldValue) {
if (Array.isArray(iteration.oldValue)) {
subscriptionCode = iteration.oldValue[0].service;
} else {
subscriptionCode = iteration.oldValue.service;
}
} else {
if (Array.isArray(iteration.newValue)) {
subscriptionCode = iteration.newValue[0].service;
} else {
subscriptionCode = iteration.newValue.service;
}
}
return getSubscriptionName(subscriptionCode);
break;
}
我想要实现的目标:
我在这里检查订阅代码,然后调用此函数:
function getSubscriptionName(subscriptionCode) {
ServiceService.getService(subscriptionCode)
.then(function(response){
var subscriptionName = response.data.name
return response.data.name;
})
}
调用服务来获取订阅名称。然后该字符串将通过此函数传递并打印在表格中:
function transformDetailValuesReworked(iteration) {
//...
var fieldSetTransformation = setFieldTransformation(iteration);
return fieldSetTransformation;
}
实际发生的事情:
如果我正确理解了承诺的异步性质,var subscriptionName = response.data.name
永远不会发生,所以返回undefined
。
我尝试了什么:
我尝试了一种链式承诺方法,但它的行为方式并不像我期望的那样。此外,虽然这不是一个好习惯,但我试图在功能中设置回调,但最终还是在同一个死角。
我非常确定我可以使用async function approach,但我担心兼容性问题。
你能说清楚吗?谢谢。答案 0 :(得分:0)
您只是忘记从getSubscriptionName
function getSubscriptionName(subscriptionCode) {
return ServiceService.getService(subscriptionCode)
.then(function(response){
var subscriptionName = response.data.name
return response.data.name;
})
}
但是接下来的方法需要将其视为异步
function transformDetailValuesReworked(iteration) {
//...
var fieldSetTransformation = setFieldTransformation(iteration);
return fieldSetTransformation; // This is a promise not a value!
}