承诺同步功能
Promisifying an synchorous function
所以,我有一个类似这样的代码。
getSomethingAsync(something)
.then(doSomethingAsync)
.then(function(d) {
_d = doSomethingSync(d);
return doSomethingAsyncNext(_d);
})
.then(function(val) {
//All done
})
.catch(err_handler);
我想把它做成类似的东西。
getSomethingAsync(something)
.then(doSomethingAsync)
.then(doSomethingSync)
.then(doSomethingAsyncNext)
.then(function(val) {
//All done
})
.catch(err_handler);
我应该只更改 doSomethingSync 吗:
function(data) {
// do a lot of things with data, throw errors for invalid data
return changed_data;
}
至:
function(data) {
// do a lot of things with data, throw errors for invalid data
return new Promise(function(resolve,reject){
resolve(changed_data);
});
}
或:
function(data) {
return new Promise(function(resolve,reject){
// do a lot of things with data, reject for invalid data
resolve(changed_data);
});
}
Should I just change doSomethingSync which is ...
您不必全部更改。如果回调的 return 值 不是 承诺,则直接用于解析由 .then
编辑的承诺 return。 .then
回调没有 到 return 的承诺。
你可以写
return Promise.resolve(changed_data);
但同样,没有必要。 return changed_data;
也可以。
所以,我有一个类似这样的代码。
getSomethingAsync(something)
.then(doSomethingAsync)
.then(function(d) {
_d = doSomethingSync(d);
return doSomethingAsyncNext(_d);
})
.then(function(val) {
//All done
})
.catch(err_handler);
我想把它做成类似的东西。
getSomethingAsync(something)
.then(doSomethingAsync)
.then(doSomethingSync)
.then(doSomethingAsyncNext)
.then(function(val) {
//All done
})
.catch(err_handler);
我应该只更改 doSomethingSync 吗:
function(data) {
// do a lot of things with data, throw errors for invalid data
return changed_data;
}
至:
function(data) {
// do a lot of things with data, throw errors for invalid data
return new Promise(function(resolve,reject){
resolve(changed_data);
});
}
或:
function(data) {
return new Promise(function(resolve,reject){
// do a lot of things with data, reject for invalid data
resolve(changed_data);
});
}
Should I just change doSomethingSync which is ...
您不必全部更改。如果回调的 return 值 不是 承诺,则直接用于解析由 .then
编辑的承诺 return。 .then
回调没有 到 return 的承诺。
你可以写
return Promise.resolve(changed_data);
但同样,没有必要。 return changed_data;
也可以。