在答应结束时,我想调用一个期望使用$scope.getDetails = function() {
MySvc.getDetails("abc").then(function(response){
console.log(response) // your details here
}, function(error){
console.log(error.statusText);
});
};
和err
参数的回调。像这样:
results
但是诺言不是那样的。
答案 0 :(得分:0)
您可以尝试拒绝具有两个属性error
和results
的对象。然后使用解构并调用callback
,如下所示:
function callback(err, results) {
console.log("error: ", err);
console.log("result: ", results);
}
function async() {
return Promise.reject({error: "your errors", results: "your results" });
}
async().catch(({error, results}) => callback(error, results));
但是请记住,resolve
是您的成功结果,reject
是您的错误。
答案 1 :(得分:0)
请注意(从经验中学到):混合使用Promise和回调时要小心。以后可能会使事情变得棘手。
但是,要确切地得到您想要的内容,您可以使用数组解析异步函数,然后使用数组解构将参数传递(有时称为“扩展”)到回调中:(如其他答案所示,对象销毁也是一种合理的选择)
function callback(err, results) {
console.log("error: ", err);
console.log("result: ", results);
}
function async() {
return Promise.resolve(["your errors", "your results" ]);
}
async().then(([error, results]) => callback(error, results));
这可以满足您的要求,但是请务必注意此代码可能带来哪些问题。 async()
函数将需要通过错误解决承诺来通过承诺链“打破规则”。 (“解决错误”和/或“拒绝良好结果”)。另外,该数组的顺序很重要。即使它是一个对象,诸如对象属性的正确拼写之类的简单事情(即“ err”属性还是“错误”)也可能引起问题。
此外,在回调函数中,可能有必要具有一些条件,以便在对结果进行任何处理之前先检查错误并进行处理。
但是,如果仅使用 个Promise,则可以对代码进行如下清理:
function async(){
var err = 'sad face'; // Play with these vars to see what happens
var results = 123;
if( err ){
return Promise.reject(err);
} else {
return Promise.resolve(results);
}
}
async()
.then((resp) => { console.log(resp) /* Work with resp, no conditionals needed :) Merrily proceed with your remaining code */ })
.catch((err) => { console.error(err)/* Err occurred, handle it here */ })