创建行但承诺不解决
create row but promise not resolve
使用 seqalizerjs,解决一个承诺:
return new Promise(function(resolve, reject){
return models.merchants.create({
name: ctx.name,
});
}).then(function(result){
resolve({
id: result.id
});
}).catch(function(err){
reject(err);
});
用 chai 作为承诺进行测试
return user.save(data).should.eventually.equal('123123');
但我总是这样:
Error: Timeout of 2000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure
it resolves.
我认为问题出在这一行:
return new Promise(function(resolve, reject){
return models.merchants.create({
name: ctx.name,
});
// .....
一个Promise
函数应该有resolve()
,像这样:
return new Promise(function(resolve, reject){
resolve(models.merchants.create({
name: ctx.name,
}));
The resolve and reject functions are bound to the promise and calling them fulfills or rejects the promise, respectively.
还是根据参考,有Promise
流程图:
Promise()
之后的 then()
或 catch()
不处理 resolve()
或 reject()
,它们只处理从 resolve()
或 reject()
.
所以,我认为你的代码应该是这样的:
return new Promise(function(resolve, reject){
resolve(models.merchants.create({
name: ctx.name,
}));
}).then(function(merchants){
console.log(merchants) // the created `merchants` from the `resolve()` of the promise would be passed here.
return merchants;
});
更新
您的代码应如下所示:
return new Promise(function(resolve, reject){
models.merchants.create({ // assuming `models.merchants.create()` is an async method
name: ctx.name,
}).then(function(result){
resolve({
id: result.id
});
}).catch(function(err){
reject(err);
});
使用 seqalizerjs,解决一个承诺:
return new Promise(function(resolve, reject){
return models.merchants.create({
name: ctx.name,
});
}).then(function(result){
resolve({
id: result.id
});
}).catch(function(err){
reject(err);
});
用 chai 作为承诺进行测试
return user.save(data).should.eventually.equal('123123');
但我总是这样:
Error: Timeout of 2000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure
it resolves.
我认为问题出在这一行:
return new Promise(function(resolve, reject){
return models.merchants.create({
name: ctx.name,
});
// .....
一个Promise
函数应该有resolve()
,像这样:
return new Promise(function(resolve, reject){
resolve(models.merchants.create({
name: ctx.name,
}));
The resolve and reject functions are bound to the promise and calling them fulfills or rejects the promise, respectively.
还是根据参考,有Promise
流程图:
Promise()
之后的 then()
或 catch()
不处理 resolve()
或 reject()
,它们只处理从 resolve()
或 reject()
.
所以,我认为你的代码应该是这样的:
return new Promise(function(resolve, reject){
resolve(models.merchants.create({
name: ctx.name,
}));
}).then(function(merchants){
console.log(merchants) // the created `merchants` from the `resolve()` of the promise would be passed here.
return merchants;
});
更新
您的代码应如下所示:
return new Promise(function(resolve, reject){
models.merchants.create({ // assuming `models.merchants.create()` is an async method
name: ctx.name,
}).then(function(result){
resolve({
id: result.id
});
}).catch(function(err){
reject(err);
});