如何改进下面的第三个功能,使用基于回调和基于Promises的函数的两个函数?
第一个函数是“times 2”的标准回调实现。
function a(i, cb) {
return cb(null, i * 2);
}
let ans =
a(2,
function(error, result) {
if (error) console.log('a callback error ' + error.message);
return result;
}
);
console.log('a(2, cb)=' + ans);
它到达
a(2, cb)=4
我的第二个函数使用Promises作为“时间3”。
function ap(i) {
return new Promise(function(resolve, reject) {
return resolve(i * 3);
})
}
ap(2)
.then(function(result, error) {
if (error) console.log('error ' + error.message);
console.log('ap(2)=' + result);
});
它到达
ap(2)=6
这个问题的动机是一段代码,我似乎无法按正确的顺序发表声明。我正在尝试使用第三个函数来学习如何使回调函数与Promises函数共存。第一次尝试调用上面的回调函数,然后链接上面的Promise函数。
let ans;
function aap(i) {
let answer = a(i, function(error, result) {
if (error) console.log('error ' + error.message);
return result;
});
ap(answer)
.then(function(result, error) {
console.log('aap ap callback result=' + result + ' error=' + error);
if (error) console.log('error ' + error.message);
ans = result;
})
}
aap(2);
console.log('aap(2)=' + ans);
它到达了两个
aap(2)=null
aap ap callback result=12 error=undefined
第一行看起来像是失败。我从第二行看到,如果我能更有效地控制语句顺序,那么正确的答案是可用的。怎么最好?
答案 0 :(得分:1)
尝试将error
处理分离到.then()
的第二个参数,从ap
返回aap
,将ans
设为let ans = aap(2)
function a(i, cb) {
return cb(null, i * 2);
}
function ap(i) {
return Promise.resolve(i * 3);
}
function aap(i) {
let answer = a(i, function(error, result) {
if (error) console.log("error " + error.message);
return result;
});
return ap(answer)
.then(function(result, error) {
console.log("aap ap callback result=" + result);
return result;
}, function(e) {
if (e) console.log("e " + e.message);
return e
})
}
let ans = aap(2);
ans.then(function(res) {
console.log(res);
return res
}, function err(e) {
console.log(e)
});
console.log(ans);

答案 1 :(得分:0)
@ guest271314很好地回答了这个问题。此外,他们为我提供了创建后续问题的有用答案所需的工具。我的原帖明确暗示了后续问题;它会要求创建函数apa(i)的技术(首先调用ap()并将其链接到()(与上面提到的问题相反)。
这是我得到的
function apa(i) {
ap(i)
.then(function(result, error) {
if (error) console.log('error ' + error.message)
else return a(result, function(error2, result2) {
if (error2) console.log('error ' + error2.message)
else console.log('apa(' + i + ')=' + result2);
});
});
}
apa(2);
它到达
apa(2)=12
如果有人关心在异步环境中使用Promises发布回调和函数的更好的技术,我很乐意阅读它。通过演示,我得出结论可以做到。