2017-10-06 6 views
0

En utilisant seqalizerjs, résoudre une promesse:créer la ligne mais promesse de ne pas résoudre

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

tests avec chaï comme promesse

return user.save(data).should.eventually.equal('123123'); 

mais je reçois toujours ceci:

Error: Timeout of 2000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure 
it resolves. 

Répondre

0

Je pense le problème réside dans cette ligne:

return new Promise(function(resolve, reject){ 
     return models.merchants.create({ 
      name: ctx.name, 
     }); 
     // ..... 

fonction Promise devrait a resolve(), quelque chose comme ceci:

return new Promise(function(resolve, reject){ 
     resolve(models.merchants.create({ 
      name: ctx.name, 
     })); 

Basé sur this reference:

The resolve and reject functions are bound to the promise and calling them fulfills or rejects the promise, respectively.

Toujours basé sur la référence, il est le graphe de flux Promise: enter image description here

Le then() ou catch() après Promise() ne gère pas le resolve() ni reject(), ils traitent uniquement la valeur transmise par resolve() ou reject().

Donc, je pense que votre code devrait être quelque chose comme ceci:

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

MISE À JOUR

Votre code devrait ressembler à ceci:

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

mais maintenant le problème est ReferenceError: rejeter n'est pas défini – Alvin

+0

vous devriez également supprimer le 'reject()' dans votre 'catch()'. Vous devriez utiliser 'reject()' dans votre 'Promise()' – samAlvin

+0

@Alvin J'ai mis à jour ma réponse :) – samAlvin