gpt4 book ai didi

javascript - promise 链接返回未定义

转载 作者:行者123 更新时间:2023-12-03 05:26:50 25 4
gpt4 key购买 nike

我正在尝试进行 promise 链接,但我得到 undefined对于我的链条中的一部分,我不确定为什么。问题似乎是当我使用 serviceFactory.GetProjectManager() 时。当我返回时,它似乎没有返回 promise ,而是自动进入下一个 .then()解析值为 undefined

如果GetProjectManager返回一个字符串,我从函数调用中返回该字符串,它不会将其包装在 promise 中并传递到下一个 promise 链吗?

  dataFactory.GetProject()
.then(function(result){
return result.Response.ProjectId;
}).then(function(projectId){
return serviceFactory.GetProjectManager(projectId);
})
.then(function(result){
//GET UNDEFINED HERE <---------
})
.catch(function(error){

});

如果我编写如下代码,那么它将在回调中返回正确的值,但我不想使用回调,我想使用扁平化的 promise 链。

dataFactory.GetProject()
.then(function(result){
return result.Response.ProjectId;
}).then(function(projectId){
serviceFactory.GetProjectManager(projectId
,function(result){
//Returns Project Manager Here <----
}
,function(error){

});
})
.catch(function(error){

});

最佳答案

正如您在评论中指出的那样,GetProjectManager 似乎接受回调(并返回 undefined),而不是返回 Promise。

您可以将原始的基于回调的函数包装到返回 Promise 的函数中,然后调用它:

function GetProjectManagerAsync (serviceFactory, projectId) {
return $q(function (resolve, reject) {
serviceFactory.GetProjectManager(projectId, resolve, reject)
})
}

dataFactory.GetProject()
.then(function(result){
return result.Response.ProjectId
})
.then(function (projectId){
return GetProjectManagerAsync(serviceFactory, projectId)
})
.then(function (projectManager) {
// do something neat with `projectManager`
})
.catch(function (error){
throw error // or do real error handling
})

还有一些很棒的库可以自动为您执行此操作,例如 Thenify .

编辑:谢谢Bergi for 指出 Angular.js 的 promise 在这里更有意义。

关于javascript - promise 链接返回未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41111403/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com