我已经实现了一些代码,其中异步代码后面跟着一些同步函数。例如:
function processSomeAsyncData() {
asyncFuncCall()
.then(syncFunction)
.catch(error);
}
如果我理解正确的话then
也是一个承诺。那么,我是否也应该在同步代码中创建一个承诺?
function syncFunction() {
const p = new Promise (function (resolve, reject) {
//Do some sync stuff
...
resolve(data);
}
return p;
}
如果这不是必需的,那么如果发生错误,如何拒绝同步代码的承诺?
您不需要显式创建新的 Promise。有一个更简单的方法。
这个例子是人为的,因为它永远不会失败,但重点是你不必创建一个承诺,也不必返回一个resolve(val)。
function syncFunction() {
var j = "hi"
if(j){
return j;
}
return new Error('i am an error');
}
这会起作用:
asyncFunction()
.then(syncFunction);
但如果你反过来做:
syncFunction()
.then(asyncFunction);
你必须将你的syncFunction定义为:
function syncFunction() {
var j = "hi"
return new Promise((resolve, reject) => {
if(j){
return resolve(j);
}
return reject('error');
})
}
Edit:为了向所有非信徒证明,请在您的计算机上本地尝试一下这个人。证明您有这么多可用的选择。 :)
var Promise = require('bluebird');
function b(h) {
if(h){
return h;
}
return Promise.resolve('hello from b');
}
function a(z) {
return new Promise((resolve, reject)=> {
if(z){return resolve(z)};
return resolve('hello from a');
})
}
a().then(b).then(x => console.log(x)).catch(e => console.log(e));
b().then(a).then(x => console.log(x)).catch(e => console.log(e));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)