转换任何其他回调 API
为了将任何回调 API 转换为承诺,假设 promisify
和 promisifyAll
版本不适合 - 你可以使用 promise 构造函数 。
创建承诺通常意味着指定它们何时结算 - 这意味着它们何时转移到已完成(已完成)或拒绝(错误)阶段以指示数据可用(并且可以使用 .then
访问)。
new Promise((fulfill, reject) => { // call fulfill/reject to mark the promise
someCallbackFunction((data) => {
fulfill(data); // we mark it as completed with the value
})
});
举个例子,让我们将 setTimeout
转换为使用 promises:
function delay(ms) { // our delay function that resolves after ms milliseconds
return new Promise((resolve, reject) => { // return a new promise
setTimeout(resolve, ms); // resolve it after `ms` milliseconds have passed
})
}
// or more concisely:
const delay = ms => new Promise(r => setTimeout(r, ms));
我们现在可以像常规的 promise 返回函数一样使用它:
delay(1000).then(() => console.log("One second passed")).
then(() => delay(1000)).
then(() => console.log("Another second passed"));