gpt4 book ai didi

javascript - 如何从函数返回不同的 promise ?

转载 作者:搜寻专家 更新时间:2023-10-30 21:17:52 25 4
gpt4 key购买 nike

A function whose declared type is neither 'void' nor 'any' must return a value.

我有一个 createOrder 函数,它应该返回一个 promise 。我在函数中有数据库调用,我想在所有数据库操作完成后解决 createOrder 函数的 promise 。

问题是 typescript 编译器不允许我从数据库函数返回 promise 中返回 promise ,因为它认为函数声明(返回 promise )没有实现:

createOrder(order:Array<Cartitem>, sum:number):Promise<Array<Cartitem>> {
this.db.put(newOrder)
.then((r)=>{
//other operations
return new Promise<Array<Cartitem>>((resolve) => {
resolve(order);
});
})
.catch(function (err) {
console.log('put order:', err);
// return new Promise<Array<Cartitem>>((reject) => {
// reject(order);
// });
});
}

我可以在函数末尾返回一个 Promise,但这当然对编译器除外。我应该在这里使用一个简单的回调吗?

最佳答案

根据您在“其他操作”中所做的事情,您可以使用通过在 this.db.put 的 promise 上调用 then 创建的 promise ,如果可以:

createOrder(order:Array<Cartitem>, sum:number):Promise<Array<Cartitem>> {
return this.db.put(newOrder)
.then((r)=>{
//other operations
return order; // Resolves the one created by `then`
})
.catch(function (err) {
console.log('put order:', err);
throw err; // Rejects the one created by `then`
});
});
}

...或者如果您由于某种原因不能,请更早地创建您的 promise ,并在其初始化回调中调用 this.db.put:

createOrder(order:Array<Cartitem>, sum:number):Promise<Array<Cartitem>> {
return new Promise<Array<Cartitem>>((resolve) => {
this.db.put(newOrder)
.then((r)=>{
//other operations
resolve(order);
})
.catch(function (err) {
console.log('put order:', err);
reject(err); // You had `order` here, but presumably it would be `err`
});
});
}

关于javascript - 如何从函数返回不同的 promise ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41102619/

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