2017-04-04 84 views
0

我期待創建尚未解決的承諾。 我會創造這個承諾,並有一些進程在等待它來解決。只有當我實際上分配了另一個我正在打的電話的承諾時,它纔會得到解決。但起初,我的所有流程都會一直等待這個承諾,直到我重新分配它爲止。我如何用ES6 Promise做到這一點。創建尚未解決的承諾es6

我知道我可以創建一個已經解決了承諾:

Promise.resolve('') 

因此,這將那種相反。

+0

['新承諾的reject(/ * *執行/功能(解析,拒絕){...}); '](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise) – str

回答

1

您可以創建這樣那樣的承諾:

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

resolvereject參數的函數本身是能夠使用的功能分別解決或拒絕承諾。他們都接受一個價值,這將是承諾的解決價值。

查看MDN Promise瞭解更多信息。

1

你可以這樣說:

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

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

您可以創建引用resolvePromise構造

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