gpt4 book ai didi

JavaScript,Promise 与回调共存

转载 作者:行者123 更新时间:2023-12-03 08:00:48 27 4
gpt4 key购买 nike

如何改进下面的第三个函数以使用基于回调的函数和基于 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 来表示“times 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

这个问题的动机是一段代码,我似乎无法让语句以正确的顺序出现。我正在尝试使用第三个函数来学习如何使带有回调的函数与带有 Promise 的函数共存。第一次尝试调用上面的回调函数,然后链接上面的 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

第一行看起来像是失败了。从第二行我看到,如果我能更有效地控制语句顺序,就可以获得正确的答案。怎么最好?

最佳答案

尝试将 error 处理分离到 .then() 的第二个参数,从 aap 返回 ap ,设置anslet 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);

关于JavaScript,Promise 与回调共存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34585144/

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