2017-04-04 5 views
0

Ich suche ein Versprechen zu erstellen, das noch nicht gelöst ist. Ich würde dieses Versprechen erstellen und einige Prozesse warten, um es zu lösen. Es würde nur gelöst werden, wenn ich tatsächlich ein anderes Versprechen eines Anrufs erteile, den ich mache. Aber zuerst würden alle meine Prozesse auf dieses Versprechen ewig warten, bis ich es neu zuweisen würde. Wie kann ich dies mit einem ES6-Versprechen machen?Erstelle ein Versprechen, das noch nicht in es6 gelöst ist

Ich weiß, dass ich mit einem bereits aufgelösten Versprechen erstellen:

Promise.resolve('') 

das wäre also Art das Gegenteil sein.

+0

[ 'neuen Promise (/ * Testamentsvollstrecker */function (resolve, ablehnen) {...}); '] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise) – str

Antwort

1

Sie diese Art von Versprechen wie diese erstellen:

new Promise(function(resolve, reject) { 
    resolve('some value'); 
    // or 
    reject('some value'); 
}); 

Die resolve und reject Parameter an die Funktion sind selbst Funktionen, die verwendet werden können, das Versprechen aufzulösen bzw. abzulehnen. Sie akzeptieren beide einen Wert, der der gelöste Wert des Versprechens sein wird.

Weitere Informationen finden Sie unter MDN Promise.

1

Sie können es wie folgt tun:

const promise = new Promise((resolve, reject) => { 
    // If you want to resolve: 
    resolve(optionalParam); 

    // If you want to reject: 
    reject(optionalParam); 
}); 
1

Sie können Verweise auf resolve erstellen, reject von Promise Konstruktor

// assign `resolve`, `reject` functions of `promise` within `Promise` constructor 
 
let _resolve = _reject = void 0; 
 

 
let promise = new Promise(function(resolve, reject) { 
 
    _resolve = resolve; // define `resolve` as `_resolve` to outer scope 
 
    _reject = reject; // define `reject` as `_reject` at outer scope 
 
}); 
 

 
promise 
 
// do stuff when `promise` resolves or rejects 
 
.then(function handleFulfilled(data) { 
 
    console.log(data) 
 
}, function handleErr(err) { 
 
    console.log(err) 
 
}); 
 

 
function fn(t, res, err, value) { 
 
    return new Promise(function(resolve, reject) { 
 
    setTimeout(function() { 
 
     resolve() 
 
    }, Math.floor(Math.random() * t)) 
 
    }) 
 
    .then(function() { 
 
    return res(value) 
 
    }) 
 
} 
 

 
fn(3000, _resolve, null, "abc") 
 
// do stuff after `promise` resolved or rejected 
 
.then(function() { 
 
    console.log("promise resolved") 
 
}, function(err) { 
 
    console.log("promise rejected", err) 
 
});

Verwandte Themen