2016-11-17 7 views
5

मेरे पास एक कोणीय 2 सेवा के भीतर एक फ़ंक्शन है जो Promise.resolve के माध्यम से नकली डेटा लौटा रहा है, जो .then के साथ अनचाहे होने पर मुझे एक खाली वादा वस्तु देता है। मैं देख सकता हूँ कि फोन करने के समारोह __zone_symbole__value संपत्ति में पेलोड के साथ वादा प्राप्त कर रहा है इससे पहले कि यह .then however inside of तो फिर I seem to be left with just an empty promise.टाइपस्क्रिप्ट मूल्यों को खोने का वादा करता है .थ

getTemperatureData(): Promise<any> { 

    let data = this.convertJSONToGoogleChartTable(temperatureData_JSON); 
    let p = Promise.resolve(data); 
    return p; 
    } 

में पारित हो जाता Chrome का उपयोग करके मुझे लगता है कि पी ऊपर लग रहा है

तरह

ZoneAwarePromise {__zone_symbol__state: true, __zone_symbol__value: "[["Date","Temperature","LowTemperature"],["05/11/2…",69.02,null],["06/11/2016 23:54:34",69.99,null]]"}

कॉलिंग कोड जो डीबग करने के लिए दो पंक्तियों में टूटा हुआ है नीचे है।

getTemperatureData() { 
    var d = this.dataService.getTemperatureData(); 
    d.then(data => this.line_ChartData = data); 
} 

जब मैं घ देखो मैं ऊपर

ZoneAwarePromise {__zone_symbol__state: true, __zone_symbol__value: "[["Date","Temperature","LowTemperature"],["05/11/2…",69.02,null],["06/11/2016 23:54:34",69.99,null]]"}

.then साथ समस्या तब होती है, जहां के "डी" मूल्य सिर्फ एक खाली वादा है पी के रूप में ही देखते हैं। जो मैं देख रहा हूं उसे दिखाने के लिए नीचे क्रोम देव टूल्स कंसोल से लिया गया था।

d.then(data => console.log(data)) 
ZoneAwarePromise {__zone_symbol__state: null, __zone_symbol__value: Array[0]} 

कोई फर्क नहीं पड़ता कि मैं क्या करता हूं और मैंने कितने संयोजन किए हैं, मैं डी के अंदर अपने डेटा तक नहीं पहुंच सकता। (ध्यान दें कि पी और घ केवल अब के लिए नीचे कोड को तोड़ने के लिए अस्थायी हैं।)

मेरे package.json नीचे है:

{ 
    "name": "angular2", 
    "version": "0.0.0", 
    "license": "MIT", 

    "angular-cli": {}, 
    "scripts": { 
    "start": "ng serve", 
    "lint": "tslint \"src/**/*.ts\"", 
    "test": "ng test", 
    "pree2e": "webdriver-manager update", 
    "e2e": "protractor" 
    }, 
    "private": true, 
    "dependencies": { 
    "@angular/common": "~2.1.0", 
    "@angular/compiler": "~2.1.0", 
    "@angular/core": "~2.1.0", 
    "@angular/forms": "~2.1.0", 
    "@angular/http": "~2.1.0", 
    "@angular/material": "^2.0.0-alpha.9-3", 
    "@angular/platform-browser": "~2.1.0", 
    "@angular/platform-browser-dynamic": "~2.1.0", 
    "@angular/router": "~3.1.0", 
    "core-js": "^2.4.1", 
    "ng2-bootstrap": "^1.1.16", 
    "node-mysql": "^0.4.2", 
    "rxjs": "5.0.0-beta.12", 
    "ts-helpers": "^1.1.1", 
    "zone.js": "^0.6.23" 
    }, 
    "devDependencies": { 
    "@types/jasmine": "^2.2.30", 
    "@types/node": "^6.0.42", 
    "angular-cli": "1.0.0-beta.19-3", 
    "codelyzer": "1.0.0-beta.1", 
    "jasmine-core": "2.4.1", 
    "jasmine-spec-reporter": "2.5.0", 
    "karma": "1.2.0", 
    "karma-chrome-launcher": "^2.0.0", 
    "karma-cli": "^1.0.1", 
    "karma-jasmine": "^1.0.2", 
    "karma-remap-istanbul": "^0.2.1", 
    "protractor": "4.0.9", 
    "ts-node": "1.2.1", 
    "tslint": "3.13.0", 
    "typescript": "~2.0.3", 
    "webdriver-manager": "10.2.5" 
    } 
} 
+1

'चलो पी = Promise.resolve (डेटा); यह अजीब है। एक वादा एसिंक है, इसलिए यदि आप यहां वादे का नतीजा पाने की उम्मीद करते हैं, तो यह नहीं है कि यह कैसे काम करता है। – Maxime

+0

कृपया हमें पूरा कोड दिखाएं। आप 'this.line_ChartData' के साथ क्या कर रहे हैं? क्या आप शायद इसे कहीं खाली कर रहे हैं? ध्यान दें कि यह वही सरणी का संदर्भ देता है जो वादे में निहित है। 'This.line_ChartData = data.slice() 'इसके बजाय – Bergi

उत्तर

1

डेटा का मूल्य सिर्फ एक खाली वादा

है

जो मुझे बताता है कि convertJSONToGoogleChartTable एक वादा वापस कर रहा है, और आप इसे अपना वादा नहीं कर रहे हैं।

ध्यान दें कि यदि आप any से अधिक मजबूत प्रकार का उपयोग कर रहे थे, तो टाइपस्क्रिप्ट कंपाइलर शायद आपके लिए यह पकड़ा होगा।

जब से तुम उस डेटा को बाद कुछ भी नहीं कर रहे हैं, तो आप सिर्फ यह कर सकता है:

getTemperatureData(): Promise<any> { 
    return this.convertJSONToGoogleChartTable(temperatureData_JSON); 
    } 

लेकिन अगर आप यह लौटने से पहले कि डेटा के साथ कुछ करना चाहता हूँ, आप कर सकते हैं कि एक then में , मूल वादे से बंधे:

getTemperatureData(): Promise<any> { 
    return this.convertJSONToGoogleChartTable(temperatureData_JSON) 
     .then(data => { 
      console.log(data); 
      return data; 
     }); 
    } 
+0

जवाब देने के लिए धन्यवाद। फ़ंक्शन कन्वर्ट जेएसओन्टो Google चार्टटेबल सिर्फ एक स्ट्रिंग देता है जो कच्चे JSON का रूपांतरण है। यह एंगुलर 2 सर्विस क्लास के भीतर है जो मैं डेटा प्राप्त करने और स्वरूपण के लिए उपयोग कर रहा हूं। – JSeatter

+0

जवाब देने के लिए धन्यवाद। फ़ंक्शन कन्वर्ट जेएसओन्टो Google चार्टटेबल सिर्फ एक स्ट्रिंग देता है जो कच्चे JSON का रूपांतरण है। यह एंगुलर 2 सर्विस क्लास के भीतर है जो मैं डेटा प्राप्त करने और स्वरूपण के लिए उपयोग कर रहा हूं। डेटा acuially 'डेटा " [["दिनांक", "तापमान", "लोटेमपर्टर"], ["05/11/2016 00:14:23", 72.44, शून्य], [05/11)/2016 00:44:31 ", 71.46, शून्य], [" 05/11/2016 01:14:39 ", 70.48, शून्य], ....]]]" कॉलर को वह रिटर्न है ठीक है, मेरे मामले में जो Angular2 घटक में "डी" है। जहां यह मेरे लिए गलत हो रहा है, उपर्युक्त स्ट्रिंग को डी से निकाला जा रहा है। – JSeatter

+0

@ जेएसएटर: यदि आप अपने कंसोल में प्रवेश करते हैं तो क्या होता है: 'Promise.resolve (2) .then (console.log) '? साथ ही, क्या होगा यदि आप 'convertJSONToGoogleChartTable'' पर कॉल के बाद 'console.log (डेटा) 'डालते हैं? – StriplingWarrior

संबंधित मुद्दे