A function whose declared type is neither 'void' nor 'any' must return a value.
我有一个createOrder
函数,应该返回一个promise。我在函数中有数据库调用,并且我希望在所有数据库操作完成后解析createOrder
函数的承诺。
问题是,打字稿编译器不允许我从数据库函数返回的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,但除了编译器之外,这当然不好。我应该在这里使用简单的回调吗?
答案 0 :(得分:3)
取决于您在&#34;其他操作中所做的事情,&#34;您可以使用then
承诺this.db.put
创建的承诺,如果可以的话:
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`
});
});
}
...或者如果由于某种原因你不能,请尽早创建你的承诺,并在其初始化回调中调用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`
});
});
}
答案 1 :(得分:1)
尝试类似
的内容Application & Application User
答案 2 :(得分:1)
您实际应该添加return
this.db.put
(及其后面的整个表达式)。
就目前而言,您正在调用this.db.put
,并在then分支中链接回调,但您不会向调用者返回任何内容。随后,调用者可能希望能够.then
createOrder
的结果,但在普通的JavaScript中,它将失败,因为结果将是未定义的。
你也可以在resolve(order)
中.then
,而不是返回数组的承诺等。
答案 3 :(得分:1)
您可以将Promise作为函数的返回值返回,并在内部promise中回调解析:
unzip myfile.zip
convmv --notest -r -f WINDOWS-1252 -t utf8