创建行但承诺不解决

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,
        }));

基于this reference:

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);
});