Javascript承诺在switch语句中返回未定义的
对不起,如果这个问题以前已经解决了,我也检查过(我认为这是一个很好的线索,但我没有理解接受的答案),最后一个 我在switch语句中有这样一个例子:Javascript承诺在switch语句中返回未定义的,javascript,Javascript,对不起,如果这个问题以前已经解决了,我也检查过(我认为这是一个很好的线索,但我没有理解接受的答案),最后一个 我在switch语句中有这样一个例子: function setFieldTransformation(iteration) { //Omitting first hundred lines and switch declaration... case "customer.subscriptionSet": var subscriptionCode;
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
我尝试过的:
我尝试过一种连锁承诺的方法,但它的行为方式与我预期的不同。此外,尽管这不是一个好的实践,我也尝试在函数中设置回调,但最终还是在同一个死区结束
我很确定我可以使用,但我担心兼容性问题
你能解释一下吗?谢谢。您只是忘记了从
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!
}
getSubscriptionName
需要一个return
getSubscriptionName
不返回任何内容。您需要返回ServiceService.getService(…)
,这使得它返回一个承诺,然后您需要在TransformDetailValuesWorked
中用setFieldTransformation(迭代)链接该承诺。然后(函数(fieldSetTransformation){…})
。考虑到函数在transformDetailValuesReworked
中的使用方式,我认为他们不会忘记承诺是如何工作的…@deceze我也得到了更新,但dupe是正确的!你好,谢谢你的回答。我正在尝试Promise对象方法:函数getSubscriptionName(subscriptionCode){var subscriptionName;返回新的Promise(函数(解析,拒绝){ServiceService.getService(subscriptionCode)};}
,但是这不起作用。我遗漏了什么?@wickedchild您根本不需要这样做-只需根据我的回答添加返回语句即可。但作为对这一直接评论的回答,你并没有兑现承诺。